И еще один адаптер

  • 20
  • Недоступна
Адаптировать Scanner к PersonScanner. Классом-адаптером является PersonScannerAdapter. В классе адаптере создать приватное финальное поле Scanner fileScanner. Поле инициализировать в конструкторе с одним аргументом типа Scanner. Данные в файле хранятся в следующем виде: Иванов Иван Иванович 31 12 19
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (257)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Andrei Po 22 уровень
23 октября, 08:38
в split() методе есть возможность указать размер массива, т.е.
String [] allNames = line.split(" ",4);
                DateFormat df = new SimpleDateFormat("dd MM yyyy");
                Date dt =  df.parse(allNames[3]);
Виталий 20 уровень, Тобольск
19 октября, 05:20
Блин не обратил внимание ,что Метод read() должен читать данные только одного человека. Мучался с циклом и буферизацией...
Dmitry Kharchenko 24 уровень, Москва
2 октября, 13:39
Какие-то недозадачи пошли. Если у меня в файле 500 строк с людьми, то какую из них должна показать программа? Одного из..? Рандомного? Или первого? Или последнего? А из какого файла читать? Тоже не нужно? Почему не доводят до конца поставленные задачи? Из-за этого только путаница в голове. Сказали бы сделать методы по выбору строки, по вводу имени файла, это же Hard задача, а решается в 5 строчек.
Антон 20 уровень, Санкт-Петербург
3 октября, 22:29
Странный вопрос. Когда сканер для чтения из файла используете, указывайте с какой именно строки читать? Очевидно же, что в данном случае читать начнет с первого. С какого файла читать - так это вообще для 19 уровня странный вопрос. С какого укажут, с такого и будет. Хотите тестить - создавайте файл, указывайте у нему путь и вперед.
AndyS 20 уровень, Москва
3 октября, 23:32
Читать будет ту же самую строку, что и функция Scanner.readNext(), только будет парсить ее и выводить в итоге не текстовую строку, а объект типа Person.
Dmitry Kharchenko 24 уровень, Москва
4 октября, 17:45
В том и тупость этой задачи, что написано в условиях "метод read должен читать данные человека". Где параметры входящие? Как пользователь должен читать данные по человеку, если он даже указать не может, какой ему нужен человек. Ровно то же и с файлом. "Какой укажешь"? Ну укажи...есть у тебя такая возможность без доступа к коду? Нет. Вот про это я говорю. Тупейшая задача ни про что.
Victor 19 уровень
6 октября, 11:06
Вот действительно я согласен. Откуда читать. Где что.
Daniil Shadrin 24 уровень, Самара
14 сентября, 10:43
Решил вот таким образом:
public Person read() throws IOException, ParseException {
            String[] person = fileScanner.nextLine().split(" ");

            return new Person(person[1], person[2], person[0], new SimpleDateFormat("dd MM yyyy")
                                .parse(String.format("%s %s %s", person[3], person[4], person[5])));
        }
Leo 22 уровень, Москва
26 сентября, 09:27
Метод Person read() throws IOException; не выкидывает исключения ParseException в интерфейсе PersonScanner, разве это не будет ошибкой при реализации метода? Сигнатура ведь другая получается. Ну и будет выкидывать ошибку "overridden method does not throw ParseException".
Andrei Po 22 уровень
23 октября, 08:34
эту Exception можно отловить в переписаном методе, а не прокидывать выше код в комменте немного избыточен, так как в split() методе есть возможность указать размер массива, т.е. можно обойтись
String [] allNames = line.split(" ",4);
                DateFormat df = new SimpleDateFormat("dd MM yyyy");
                Date dt =  df.parse(allNames[3]);
Daniil kukushkin 23 уровень
14 сентября, 09:20
Не ошибся в последовательности ФИО только потому, что пару дней назад, на уроке английского, объясняли, что за бугром принято не ФИО, а ИОФ. Дату не форматировал, просто использовал один из конструкторов класса GregorianCalendar.
Alexandr Grishin 22 уровень, Саранск
20 октября, 21:56
Я тоже им пользовался. Но парсинг там был Integer.parseInt укладывается в сигнатуру метода с IOException. Правда я проверял вывод - у меня почему то был январь 31 1951.но валидатор как не странно принял. Можете выложить сюда этот кусок кода, чтобы посмотреть/сравнить со своим. Спасибо
Михаил Клименко 19 уровень, Краснодар Expert
8 сентября, 16:27
Всего эту задачу решили 16120 учеников. Для будущих поколений: - Объект типа Scanner, который мы создали в классе-адаптере, может считывать строку гипотетического файла (с помощью обычного метода для считывания строки); - считанную строку нужно разделить на подстроки каким-либо специальным методом (их много), полученные подстроки записать в String[] массив ; - первые три элемента массива расположить в правильном порядке при создании нового объекта типа Person; - последние три элемента массива нужно преобразовать в дату (birthdate), и потом добавить последним параметром в новый объект типа Person (я выкрутился созданием новой String строки, в которую конкатенировал через пробел три последних элемента массива, потом создал объект типа SimpleDateFormat("dd MM yyyy"), создал новый объект типа Date , который инициализировал через SimpleDateFormat.parse(строка_из_трех_последних_элементов_массива);
Verhun Kyrylo 23 уровень
3 сентября, 15:48
Интересная задача. Хотелось решить через регулярные выражения. Нашел такой интересный метод
String[] fields = pattern.split();
Этот метод ищет заданный патерн в переданной ему строке и добавляет все в массив. Если правильно прописать регулярное выражение - получаем массив с разбивкой ФИО и дд.мм.гг Ну а дальше все просто, создать объект типа Person с помощью конструктора.
Артем СисАдмин Master
13 сентября, 08:43
не знаю что у тебя в переменной pattern, но это обычный метод класса String
String text = "a b c";
String[] fields = text.splt(" ");
// [a, b, c]
аргументом в split можно передавать любой текст. или же регулярки.
Verhun Kyrylo 23 уровень
14 сентября, 13:12
Да, я в курсе, читал как раз о регулярных выражениях и наткнулся на этот метод. А в патерне у меня
Pattern p = Pattern.compile("\\b\\s");
Azat Burkhanov 30 уровень, Москва
30 августа, 07:28
* @param year the year minus 1900. * @param month the month between 0-11. * @param date the day of the month between 1-31. для инициализации класса Date
Артем СисАдмин Master
13 сентября, 08:44
а еще есть такая вещь, как SimpleDateFormat.parse()
MR 20 уровень, Харьков
24 августа, 19:55
Если б не кнопка запуск, я бы не с первой. а со сто первой попытки прошла бы. И всё из-за невнимательности. Хотя первая попытка не самая честная, конечно. Но лан. (зато уже почти на автомате прописываю паттерн и делегирование, пару новых удобных методов использую уже будто они мои руки)))
Andrii Plishchuk 22 уровень, Киев
24 августа, 10:10
Единственное что непонятно в задаче - почему путь к файлу не нужно нигде прикручивать?🙄