import java.io.*;
import java.util.HashMap;
import java.util.Map;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
HashMap<String, Integer> map = new HashMap<>();
int id;
String name;
while (true) {
id = Integer.parseInt(reader.readLine());
name = reader.readLine();
map.put(name, id);
if (name.isEmpty()) {
map.put(name, id);
break;
}
}
for (Map.Entry<String,Integer> pair: map.entrySet()) {
System.out.println(pair.getValue() + " " + pair.getKey());
}
}
}
Юрий
22 уровень
Почему не проходит последнее условие?
Решен
Комментарии (23)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Артём
28 января 2019, 10:22
Мой ввод и вывод:
1
мама
2
мыла
3
раму
4
4
1 мама
2 мыла
3 раму
Ошибка валидатора:
"Если после числа была введена пустая строка, это число также должно быть выведено на экран (не должно потеряться)."
Ну, и в чем проблема?
0
IceBergMaster
28 января 2019, 10:49
Будет NumberFormatException если вместо числа передать пустую строку, а почему вылетает именно такая подсказка я хз.
0
Артём
28 января 2019, 10:52
нет никакого исключения, в Idea все прекрасно работает. И потом числа я ввожу, цикл прерывается, если не ввести строку (ключ).
0
IceBergMaster
28 января 2019, 10:54
Тестируй:
1
aaa
2
bbb
- пустая строка
0
Артём
28 января 2019, 10:57
Такой формат противоречит заданию: "Новая задача: Программа вводит с клавиатуры пары (число и строку)". Из условия я полагаю, что порядок строгий: число + строка.
0
IceBergMaster
28 января 2019, 11:01
Эм, ну да, в моем примере идет "число + строка -> число + строка -> конец ввода."
0
Артём
28 января 2019, 11:05
Выложите пожалуйста код, который пропустил валидатор, если у вас получилось. Я хочу материал изучать, а не тратить время на то чтобы догадываться, что автор подразумевал.
0
IceBergMaster
28 января 2019, 11:11
Автор подразумевал именно то, что есть в условии, а именно - считывать данные и заносить их в словарь, а пустая строка сигнализирует о конце ввода. Код демонстрировать, конечно же, я не буду, так как дебажить и понимать свои ошибки, это и есть "материал изучать"
0
Артём
28 января 2019, 11:25
Пропустил. Но по сути, теперь никто мне не мешает вносить и туда и туда слова.
0
IceBergMaster
28 января 2019, 11:30
Так а зачем тогда было убирать Integer.parseInt()?)
0
Артём
28 января 2019, 11:45
Потому что, если делать так как выше, то в данный момент мне кажется, что это снова не по условию задачи. Если в данном случае я введу пустую строку, программа завершится. А если строку, но не число? Снова завершится. Но никто же так не запрещал вводить String первым. То есть в catch тогда нужно снова просить вбить id. Зацикливать проверку, пока ты первым значением именно int не впишешь и только потом пускать на ввод String.
0
IceBergMaster
28 января 2019, 11:54
Что мешает получить строку -> проверить на пустоту -> запарсить?
А пары вводятся в формате "число - имя" по условию
+1
IceBergMaster
28 января 2019, 12:00
"Если в данном случае я введу пустую строку, программа завершится" - почему завершиться, если ваш блок try находиться в цикле, то будет выполнен выход из цикла break, а дальше вывод на экран
0
kto_toExpert
27 января 2019, 16:03
"Пустая строка - конец ввода"
При вводе пустой строки у вас:
NumberFormatException
Куда смотреть вообще? На какой код?
0
Юрий
27 января 2019, 16:07
Отредактировал. У меня не выходит никакой ошибки. Проверял несколько раз, вводя разные значения с клавиатуры. Всё работает. Но валидатор не пропускает.
0
kto_toExpert
27 января 2019, 16:13
Зря условие убрали. У меня подписка давно закончилась, не могу условие полностью посмотреть. У вас не может она работать без выброса исключений, на сколько я помню прекращать считывание надо с пустой строки.
В этот момент строку будет ожидать этот кусок кода:
А если в parseInt отправить пустую строку, то он вернёт NumberFormatException 0
Юрий
27 января 2019, 16:23
Попробуйте сами ввести любые данные и запустить на компиляторе. Всё корректно выводится.
0
Юрий
27 января 2019, 16:26
Даже если вставляю try catch, не проходит.
0
IceBergMaster
28 января 2019, 10:42
Попробовал, на примере
1
aaa
2
bbb
- пустая строка
И получил ошибку NumberFormatException, как и писали выше, это же очевидно.
0
Юрий
30 января 2019, 18:41
У Вас неправильный порядок. Нужно строго соблюдать порядок ввода: после строки не может идти пустая строка. Это же очевидно.
0
IceBergMaster
30 января 2019, 18:53
Ты шутишь? После строки, в идеале, и должна идти пустая строка, так как строка(имя) завершает пару, после этого - конец ввода.
Вот я пользователь, хочу использовать твою программу, как мне передать ей пару "число-имя"?
0
Юрий
31 января 2019, 07:31
Очень просто передать: сначала ввести число, потом ввести имя. Как и показано в примере ввода.
0
IceBergMaster
31 января 2019, 09:06
Ввел число, ввел имя, программа стоит, ничего не выводит, так как цикл while стоит и требует следующей строки. Что-то не очень у тебя инструкции)
0