Как вывести ключ и значение TreeMap

158
28 мая 2022, 03:30

Если пишем новое имя, программа просит ввести номер телефона и запоминает его. Если новый номер телефона — просит ввести имя и также запоминает. Если вводим существующее имя или номер телефона, программа выводит всю информацию о контакте. При вводе команды LIST программа печатает в консоль список всех абонентов в алфавитном порядке с номерами. При итерации TreeMap и выводе содержимого значение выводился как null:

LIST
79027555543null
79037555587null
79076555543null
Аннаnull
Василийnull
Федорnull

Что нужно исправить, чтобы map выводилось в таком виде?

-79037555587 Федор
-79016555576 Анна
-79027666687 Иван

Мой код:

public static void main(String[] args) {
        System.out.println("Введите данные: ");
        Scanner scanner = new Scanner(System.in);
        TreeMap<String, String> map = new TreeMap<>();
        while (true) {
            String str = scanner.next();
            Matcher matcher = Pattern.compile("[a-zA-Zа-яА-Я.].").matcher(str);
            Matcher matcher2 = Pattern.compile("^7\\d{10}$").matcher(str);
            if (str.equals("LIST")) {
                for (Map.Entry<String, String> item2 : map.entrySet()) {
               System.out.println(item2.getKey()+item2.getValue());
                }
            } else if (matcher2.find()) {
                if (map.containsKey(str)) {
                    System.out.println(map.get(str));
                } else {
                    System.out.println(" Введите имя :");
                    map.put(str, map.get(str));
                }
            } else if (matcher.find()) {
                if (map.containsValue(str)) {
                    for (Map.Entry<String, String> item : map.entrySet()) {
                        if (str.equals(item.getValue())) {
                            System.out.println(item.getKey());
                        }
                    }
                } else System.out.println(" Введите телефон :");
                map.put(str, map.get(str));
            } else System.out.println("Введите верное значение");
        }
    }
}
Answer 1

Проблема в том, что после запросов Введите имя и Введите телефон, из System.in ничего не читается, а вместо этого делается:

map.put(str, map.get(str));

где str это значение, которое пользователь уже ввел и которое проверялось. Оно используется как ключ и в словарь вставляется всегда null.

Нужно добавить после запроса имени что-то вроде:

System.out.println(" Введите имя :");
String name = scanner.next();
map.put(str, name);

А после ввода телефона:

else {
   System.out.println(" Введите телефон :");
   String phone = scanner.next();
   map.put(phone, str);
}
READ ALSO
Передать объект в форме spring

Передать объект в форме spring

Подскажите, как передать объект в форме springЯ использую Thymeleaf

267
Как сделать полукруговой ProgressBar?

Как сделать полукруговой ProgressBar?

Нужно реализовать такую штукуДумал сделать с помощью shape, но пока только круговой получился

129
Вставка записей в БД в разные таблицы

Вставка записей в БД в разные таблицы

Можно ли одним запросом вставить данные в несколько таблиц в PostgreSQL?

176