JavaRush
Акция
Университет
Java FullStack
Python FullStack
new
Web FullStack
new
Обучение
Курсы
Задачи
Опросы
Игры
Помощь
График пинков
Стажировка
Сообщество
Пользователи
Форум
Чат
Статьи
Истории успеха
Активности
Отзывы
Подписки
Светлая тема
Вопрос
  • Отзывы
  • О нас
  • CS50
Начать
Начать обучение
Начать обучение
  • Все вопросы
JavaRush/Помощь по Java задачам/Что не так?
Oleh
27 уровень
  • 30.01.2019
  • 520просмотров
  • 7комментариев

Что не так?

Вопрос по задаче Хуан Хуанович
Java Core,  9 уровень,  11 лекция
Решен


В метод main первым параметром приходит имя файла.
В этом файле каждая строка имеет следующий вид:
имя день месяц год
где [имя] - может состоять из нескольких слов, разделенных пробелами, и имеет тип String.
[день] - int, [месяц] - int, [год] - int
данные разделены пробелами.

Заполнить список PEOPLE используя данные из файла.
Закрыть потоки.

Пример входного файла:
Иванов Иван Иванович 31 12 1987
Вася 15 5 2013

Требования:
  • Класс Solution должен содержать публичную константу PEOPLE типа List<Person>, которая должна быть сразу проинициализирована.
  • Программа НЕ должна считывать данные с консоли.
  • Программа должна считывать содержимое файла (используй FileReader).
  • Поток чтения из файла (FileReader) должен быть закрыт.
  • Программа должна заполнить список PEOPLE данными из файла.
  • Программа должна правильно работать с двойными именами, например Анна-Надежда.
package com.javarush.task.task19.task1921; import java.io.*; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; import java.lang.*; /* Хуан Хуанович */ public class Solution { public static final List<Person> PEOPLE = new ArrayList<Person>(); public static void main(String[] args) throws Exception { BufferedReader reader = new BufferedReader(new FileReader(args[0])); while (reader.ready()) { String file = reader.readLine(); char[] arr = file.toCharArray(); String n = ""; String name = ""; for (int i = 0; i < arr.length; i++) { if (arr[i] != '0' && arr[i] != '1' && arr[i] != '2' && arr[i] != '3' && arr[i] != '4' && arr[i] != '5' && arr[i] != '6' && arr[i] != '7' && arr[i] != '8' && arr[i] != '0') { name = name + arr[i]; } else { n = name; } } ArrayList<String> qw = new ArrayList<String>(); String[] array = file.split("\\s"); for(String ars:array){ if(ars.contains("1")||ars.contains("2")||ars.contains("3")||ars.contains("4")||ars.contains("5")||ars.contains("6")||ars.contains("7")||ars.contains("8")||ars.contains("9")){ qw.add(ars); } } char[] arr2 = n.toCharArray(); String Name = ""; for (int i = 0; i < arr2.length - 3; i++) { Name = Name + arr2[i]; } String[] url = qw.toArray(new String[qw.size()]); int day = Integer.parseInt(url[0]); int month =Integer.parseInt(url[1]); int year = Integer.parseInt(url[2]); String format = day+" "+ month +" "+ year; SimpleDateFormat dateFormat = new SimpleDateFormat("dd MM yyyy"); Date dateResult = dateFormat.parse(format); PEOPLE.add(new Person(Name,dateResult)); } reader.close(); } }
0
Комментарии (7)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Сергеев Виктор
Уровень 40
Master
30 января 2019, 20:12
четсно, это жесть... n name file который не файл а строка из файла qw, arr, arr2, array спорим если вам выдать набор этих слов отдельно от задачи вы никогда не отгадаете что содержат эти перменные...
0
Oleh
Уровень 27
30 января 2019, 20:14
Ну эт понятно) Код совсем другой был, и должен быть бы робочим, но ошибка непонятная вилетала в IDE, в итоге сгорел и нафигачил)
0
Сергеев Виктор
Уровень 40
Master
30 января 2019, 20:15полезный
ну это нифига не повод. люди же пытаются помочь, а упираются в набор символов и види гадай что он означает
+1
Oleh
Уровень 27
30 января 2019, 20:58
Переписал тот-же код по нормальному, прошло) public static void main(String[] args) throws Exception{ BufferedReader reader = new BufferedReader(new FileReader(args[0])); while (reader.ready()) { String fileText = reader.readLine(); ArrayList<String> ListForDay_MM_YYYY = new ArrayList<String>(); String[] array = fileText.split("\\s"); String name = ""; for(String ars:array){ // Если строка не число, пишем в Имя, если "число" добавляем в лист Даты if(ars.contains("1")||ars.contains("2")||ars.contains("3")||ars.contains("4")||ars.contains("5")||ars.contains("6")||ars.contains("7")||ars.contains("8")||ars.contains("9")){ ListForDay_MM_YYYY.add(ars); }else{ name = name + ars.toString() + " "; } } char[] arrayForName = name.toCharArray(); // String Name = ""; // Имя-Фамилия for (int i = 0; i < arrayForName.length -1 ; i++) { // Name = Name + arrayForName[i]; // } // int day = Integer.parseInt(ListForDay_MM_YYYY.get(0)); // Даты int month =Integer.parseInt(ListForDay_MM_YYYY.get(1)); // Даты int year = Integer.parseInt(ListForDay_MM_YYYY.get(2)); // Даты String format = day+" "+ month +" "+ year; SimpleDateFormat dateFormat = new SimpleDateFormat("dd MM yyyy"); Date dateResult = dateFormat.parse(format); PEOPLE.add(new Person(Name,dateResult)); } reader.close();
0
IceBerg
Уровень 41
Master
30 января 2019, 20:11
Почему всё так запутаннооооо?))) у тебя же есть блок
ArrayList<String> qw = new ArrayList<String>();
            String[] array = file.split("\\s");
            for(String ars:array){
                if(ars.contains("1")||ars.contains("2")||ars.contains("3")||ars.contains("4")||ars.contains("5")||ars.contains("6")||ars.contains("7")||ars.contains("8")||ars.contains("9")){
                    qw.add(ars);
                }
            }
Почему не добавить "else" и заполнить там имя, и всё, половину кода можно просто вырезать, никаких символьных массивов и ненужных переменных. Сорян, что по делу не пишу, но реально сложно разбирать такой код.
0
Oleh
Уровень 27
30 января 2019, 20:13
Там немного лишних переменных, убрать надо. А почему в else не сделал, как вы говорите, так я сделал, ошибка всё время вылетала, пол дня с ней боролся, в итоге переписал.
0
Сергеев Виктор
Уровень 40
Master
30 января 2019, 20:16
уже не со стороны валидатора, а воспитанный тестировщиками =) а что если в имя будет содержать цифру например "Александр-117"
0
Обучение
  • Курсы программирования
  • Регистрация
  • Курс Java
  • Помощь по задачам
  • Цены
Сообщество
  • Пользователи
  • Статьи
  • Форум
  • Чат
  • Истории успеха
  • Активности
Компания
  • О нас
  • Контакты
  • Отзывы
  • FAQ
  • Поддержка
JavaRush JavaRush — это интерактивный онлайн-курс по изучению Java-программирования c нуля. Он содержит 1200 практических задач с проверкой решения в один клик, необходимый минимум теории по основам Java и мотивирующие фишки, которые помогут пройти курс до конца: игры, опросы, интересные проекты и статьи об эффективном обучении и карьере Java‑девелопера.
Подписывайтесь
Язык интерфейса
Русский
English Українська
"Программистами не рождаются" © 2025 JavaRush
MastercardVisa
"Программистами не рождаются" © 2025 JavaRush