package com.javarush.test.level18.lesson10.home08; import java.io.FileInputStream; import java.io.IOException; import java.util.*; /* Нити и байты Читайте с консоли имена файлов, пока не будет введено слово "exit" Передайте имя файла в нить ReadThread Нить ReadThread должна найти байт, который встречается в файле максимальное число раз, и добавить его в словарь resultMap, где параметр String - это имя файла, параметр Integer - это искомый байт. Закрыть потоки. Не использовать try-with-resources */ public class Solution { public static Map<String, Integer> resultMap = new HashMap<String, Integer>(); public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while(true) { String s = scanner.nextLine(); if (s.equals("exit")) break; new ReadThread(s).start(); } scanner.close(); } public static class ReadThread extends Thread { private String fileName; public ReadThread(String fileName) { //implement constructor body this.fileName = fileName; } // implement file reading here - реализуйте чтение из файла тут public void run() { try { FileInputStream inputStream = new FileInputStream(fileName); ArrayList<Integer> bytes = new ArrayList<>(); while (inputStream.available() > 0) { int x = inputStream.read(); bytes.add(x); } int x = 0; //максимальное количество повторений до следующего цикла int max; if (bytes.size() > 0) { max = bytes.get(0); //значение байта, повторяющегося максимальное количество раз for (int i = 0; i < bytes.size(); i++) { int count = 0; for (Integer aByte : bytes) { if (Objects.equals(bytes.get(i), aByte)) count++; } if (count > x) { x = count; max = bytes.get(i); } } } else max = 0; resultMap.put(fileName, max); inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } }
Leave A Comment