import java.io.*;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String str = reader.readLine(); //ввожу имя файла в консоль
InputStream in = new FileInputStream(str);// передаю файл в поток
List<Integer> list= new ArrayList<>();//создаю лист
while(in.available()>0) //вот в этой части кода я не уверен он посимвольно строку смотрит или всю целиком?
{
list.add(in.read());//добавляю в лист то что прочитал из файла
}
in.close();
reader.close();
int[]mas = new int[list.size()];//создаю массив длиной длины листа
for(int i =0;i<list.size();i++){mas[i] = list.get(i); System.out.println(mas[i]);}// перевожу элементы из листа в массив
Arrays.sort(mas); //сортирую массив
for (int i =0; i <mas.length; i ++){
if(mas[i]%2==0) System.out.println(mas[i]);}//вывожу то что кратно 2
// напишите тут ваш код
}
}
Александр
18 уровень
что я делаю не так?
Архивный
Комментарии (5)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Юрій Мартинюк
25 марта 2019, 16:09
Попробуйте вот так:
1) Считываем название файла из консоли, думаю, что здесь не надо ничего объяснять.
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
2) помещаем имя файла, которое только, что считали (в виде строки) в объект reader,
файлового потока FileInputStream, который знает как соединиться с существующим файлом
(название которого мы ввели в консоли).
FileInputStream fileReader = new FileInputStream(reader.readLine());
3) InputStreamReader - позволяет прочитать информацию из файла, но не может напрямую
соединиться с файлом. Ему нужно подключиться к потоку соединения, в данном случае к
fileReader.
InputStreamReader inStream = new InputStreamReader(fileReader);
4) Буфер предоставляет временное хранилище для читаемых данных, пока он не заполниться.
Благодаря буферу, вам придется меньше раз обращаться к файлу. Пользование буфером
очень выгодно. Это как совершать покупки в супер маркете с тележкой. Если бы не было
буфера, сколько раз пришлось бы проходить через касу и складывать все, к примеру в машину.
BufferedReader bufReader = new BufferedReader(inStream);
5) Далее, Вы читаете информацию не байтами, а целыми строками, потому что мы работаем с объектом BufferedReader, где есть метод readLine(), который позволяет нам читать целые строки из буфера, и в цикле записываете их в list,
используя Integer.parseInt(line) - вы записываете в ArrayList<>(), цифры, а не строки
String line = null;
while ((line = bufReader.readLine()) != null) {
int myData = Integer.parseInt(line);
list.add(myData);
}
6) Закрываем все наши потоки, которые были открыты ранее
reader.close();
inStream.close();
bufReader.close();
7) Потом сортируем list, и в цыкле определям чётные цифры и выводим их на экран
sort(list);
for (int i = 0; i < list.size(); i++) {
if ((list.get(i) % 2) == 0) {
System.out.println(list.get(i));
}
}
и не забудьте обернуть все в try - c
+2
Александр
25 марта 2019, 17:17
Спасибо за очень развернутый ответ. Единственный не понятный момент. String line =null; затем line = buf.readLine(). Почему нельзя сразу записать String line = buf.readLine()? зачем создавать пустую строку?
+1
Юрій Мартинюк
25 марта 2019, 19:27
Хороший вопрос, можно сказать отличный.
Для этого предлагаю Вам попробовать скомпилировать два варианта:
первый
второй
Solution.java:20: error: ')' expected
while ((String line = bufReader.readLine()) != null) {
^
Solution.java:20: error: illegal start of expression
while ((String line = bufReader.readLine()) != null) {
^
Solution.java:20: error: ';' expected
while ((String line = bufReader.readLine()) != null) {
^
3 errors
Ответ на этот вопрос предлагаю найти самостоятельно.
Прочитайте и попытайтесь понять разницу между объявлением и инициализацией переменных экземпляра и локальными переменными. 0
Дмитрий
4 мая 2019, 20:27
Спасибо за разъяснения, понял как работает именно с твоего комментария.
0
IceBergMaster
25 марта 2019, 13:57
read() читает байты.
Лучше FileInputStream запихнуть в буфер или сканер.
0