вот мой код(точнее код джавараша): ArrayList<Integer> arr = new ArrayList<>(); ArrayList<Integer> result = new ArrayList<>(); BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); // String fileName = reader.readLine(); String fileName = "c:/anal.txt"; int[] byteCountArray = new int[256]; try (FileInputStream fileInputStream = new FileInputStream(fileName)) { while (fileInputStream.available() > 0) { byteCountArray[fileInputStream.read()] += 1; } } int minCount = Integer.MAX_VALUE; for (int byteCount : byteCountArray) { if (byteCount > 0 && byteCount < minCount) minCount = byteCount; //System.out.println(Arrays.toString(byteCountArray)); } // System.out.println(minCount); ArrayList<Integer> resultList = new ArrayList<>(); for (int i = 0; i < byteCountArray.length; i++) { if (byteCountArray[i] == minCount) resultList.add(i); } for (Integer resultItem : resultList) System.out.print(resultItem + " "); } я б хотел понять что значат некоторые строчки: например: byteCountArray[fileInputStream.read()] += 1; что это такое? почему вместо указа индекса тут написано fileInputStream.read(), и зачем к нему прибавлять 1? еще: почему именно 256 длина массива? и еще : int minCount = Integer.MAX_VALUE; для чего нам понадобилась переная с максимальным размером int?