Не понимаю что я делаю не так

95
01 марта 2021, 21:50

Задача: Программа вводит с клавиатуры пару (число и строку) и выводит их на экран.

Новая задача: Программа вводит с клавиатуры пары (число и строку), сохраняет их в HashMap.
Пустая строка - конец ввода данных.
Числа могут повторяться. Строки всегда уникальны. Введенные данные не должны потеряться!

Затем программа выводит содержание HashMap на экран. Каждую пару с новой строки.

    import java.io.*;
    import java.util.Map;
    import java.util.HashMap;
    /* 
    Функциональности маловато!
    */
    public class Solution {
        public static void main(String[] args) throws IOException {
            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
            HashMap <String, Integer> list = new HashMap <String, Integer> ();
            while (true) {
                String s = reader.readLine();
                if (s.isEmpty()) {
                    break;
                }
                try {
                    Integer id = Integer.parseInt(s);
                    String name = reader.readLine();
                    if (name.isEmpty()) {
                        break;
                    }
                    list.put(name, id);
                }
                catch (NumberFormatException e) {
                    for (Map.Entry<String, Integer> pair : list.entrySet()) {
                        System.out.println(pair.getKey() + " " + pair.getValue());
                    }
                    break;
                }
            }
            for (Map.Entry<String, Integer> pair : list.entrySet()) {
                System.out.println(pair.getKey() + " " + pair.getValue());
            }

        }
    }
Answer 1

Если я правильно вас понял, то вы должны поправить

if (s.isEmpty()) {
    break;
}

на

if (s.isEmpty()) {
    return list;
}

P.S Тут многое зависит от того, что у вас за валидатор. Как я понял, это какая-то задачка с сайта или из java-rush. В проверке валидатора может как мой первый ответ пройти, так и эта правка

Переместите ваш for-цикл в отдельный метод

   private void showMap(HashMap<String, Integer> list){
     if(!map.isEmpty()){
        for (Map.Entry<String, Integer> pair : list.entrySet()) {
            System.out.println(pair.getKey() + " " + pair.getValue());
        }
     }
   }

и тогда весь ваш класс будет выглядеть примерно так

 public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        HashMap <String, Integer> list = new HashMap <String, Integer> ();
        while (true) {
            String s = reader.readLine();
            if (s.isEmpty()) {
                showMap(list);
            }
            try {
                Integer id = Integer.parseInt(s);
                String name = reader.readLine();
                if (name.isEmpty()) {
                    break;
                }
                list.put(name, id);
            }
            catch (NumberFormatException e) {
                showMap(list);
                break;
            }
            showMap(list);
        }

   private void showMap(HashMap<String, Integer> list){
        if(!map.isEmpty()){
            for (Map.Entry<String, Integer> pair : list.entrySet()) {
                System.out.println(pair.getKey() + " " + pair.getValue());
            }
        }else {
           return null;
        }
   }

И тут надо смотреть, что от вас хочет валидатор.

READ ALSO
Как реализовать Шейпер трафика

Как реализовать Шейпер трафика

Есть сокеты на JavaВсе данные передаются в виде объектов(хотел как проще, а вышло как обычно)

82
Как перевести \n в строку

Как перевести \n в строку

Как мне перевести \n в строку? Если я пишу :

98
Проблема при запуске программы в режиме Debug

Проблема при запуске программы в режиме Debug

Запускаю программу в режиме отладкиПрограмма выполняется, но в консоли надпись красным цветом:

119