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

  • 10
  • Недоступна
Адаптировать Scanner к PersonScanner. Классом-адаптером является PersonScannerAdapter. В классе адаптере создать приватное финальное поле Scanner fileScanner. Поле инициализировать в конструкторе с одним аргументом типа Scanner. Данные в файле хранятся в следующем виде: Иванов Иван Иванович 31 12 19
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (119)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Андрей20 уровень, Гомель
четверг, 12:06
Убейтесь со своими firstName, middleName и lastName. Если хотите уж на английском то так и пишите name, surname, patronymic. П.С. для задачи необходимо имя / отчество / фамилия в таком порядке.
Александр19 уровень, Казань
понедельник, 11:37
Комменты сила! Узнал как запарсить строку в нужном виде - дату не обязательно в конце парсить, а потом собирать - достаточно просто указать лимит.
String str[] = fileScanner.nextLine().split(" ", 4);
Для проверки можно заюзать код:
Scanner sc = new Scanner(Paths.get("C:/1/1.txt"), "Windows-1251");
PersonScanner psc = new PersonScannerAdapter(sc);

System.out.println(psc.read());
System.out.println(psc.read());
psc.close()
Николай22 уровень
4 марта, 09:30
пока дошел до этого уровня успел забыть как работать с классом Data ... оставлю себе как напоминалку
Date birthDate = new SimpleDateFormat("d M y", Locale.ENGLISH).parse(stringDate);
Lex24 уровень, Москва
6 марта, 10:42
Использовал ваш подход к решению с датой,но так до конца и не понял как метод parse разбирает строку,по каким критериям.Если сможете поясните,или за ссылку на материалы тоже буду благодарен.
Николай22 уровень
6 марта, 11:50
http://divancoder.ru/2017/12/simpledateformat/ Если вкратце, то первый параметр, это вид в котором мы ждем параметр даты (день, месяц и год разделенные пробелом в нашем случае, но можно использовать и другие разделители), второй параметр это в каком языковом представлении мы ждем - по идее можно пропустить. parse - это метод, который по шаблону из первого параметра разделяет поданную в него строку
Lex24 уровень, Москва
6 марта, 16:09
Спасибо
Oleg Fedoruk22 уровень
27 февраля, 20:23
сделал верно, только в конструкторе вызывал свой файл с диска, убрал файл - прошло.
Shamil20 уровень
24 февраля, 15:37
Постоянно при решений задачек создавал новый класс test с отдельным pvsm и постоянно удалял, думал Валя будет ругаться на лишний код, а в этот раз забыл удалить но Валя пропустила. Наша Валя поумнела после недавнего обновления.
Antony.Glim26 уровень
19 февраля, 10:48
В конструкторе Person имя фамилия отчество не в том порядке как в файле. 8 попыток на последнем пункте
cola20 уровень, Москва
14 февраля, 16:34
Date ужасен .. new Date (year - 1900, month, day);
Boris23 уровень
15 февраля, 16:33
month-1 если хочеш попасть на декабрь (0-11) так идёт индексы месяцев
cola20 уровень, Москва
4 марта, 08:08
-1900 ! я про это ..
Dmytro Zhelezniak27 уровень, Харьков
12 февраля, 11:43
Каждый раз смотрю с ужасом на задачи, в которых нужно что-то делать с датой. До сих пор тяжело для моего мозга.
S3R3N1TY29 уровень, Санкт-Петербург
7 февраля, 22:07
Очень хорошая задача ! Вот здесь реально понимаешь на практике что конкретно ты адаптируешь и к чему. Выделил главное: 1. Понять, что наш Адаптер принимает в конструкторе в качестве параметр какой-то Scanner. А какой именно он там примет, это нас не касается. Лично я потом когда проверял указал там реальный файл на диске со строками из задания.
PersonScanner ps = new PersonScannerAdapter(new Scanner(new File("/Users/s3r3n1ty/Desktop/Text.txt")));
//Ну и заодно вызвал методы чтобы глянуть как все работает
    Person person = ps.read();
    System.out.println(person);
    ps.close();
2. Реализация метода Person read() используя SimpledateFormat и вернул значение примерно так
String line =  fileScanner.nextLine(); //прочел запись в файле
String[]arr =  line.split("\\s",4);//Разбил на 4 строки, последняя с датой
return new Person(arr[1],arr[2],arr[0],date);
Читать нужно только одну строку, не надо весь файл перебирать. Просто тупо прочесть одну строку. Вопрос: вообще наш Адаптер больше походит на Декоратор, так как мы не просто привели к типу(сделали совместимость), а еще написали свою реализацию метода- дополнили тем самым функциональность, или я не прав? В чем тогда здесь в нашем примере отличие от Декоратора?
Александр19 уровень, Казань
понедельник, 11:29
Лови плюсик!
//Разбил на 4 строки, последняя с датой
Юрий29 уровень, Минск
1 февраля, 19:33
потратил много попыток,а все потому что было "dd MM yyyy" вот так))) а надо без пробелов.хотя многие в коментах писали с пробелами,хз почему так
Денис23 уровень
4 февраля, 04:17
у меня с пробелами прошло, точно как у тебя
Юрий29 уровень, Минск
4 февраля, 14:27
видимо это зависит в каком виде находиться строка которую приводят с помощью симпла,у меня она была записана без пробелов
S3R3N1TY29 уровень, Санкт-Петербург
7 февраля, 22:18
У меня такая была - прошло ("dd M y", Locale.ENGLISH);