Доступ к методам HashMap с помощью пользовательской строки ввода вместо имени HashMap - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть два HashMaps HashMap<String, String> verb и HashMap<String, String> noun.Мне нужно получить доступ к их ключам и значениям, используя пользовательский ввод, хранящийся в String name.Как я могу получить доступ к HashMaps, чтобы мне не приходилось явно указывать имя HashMap в моем коде?

Предположим, пользователь создает HashMap<String, String> adjective, метод должен обрабатывать HashMap, имя которого явно не указано вкод.Я думал попробовать что-то вроде name.get(question) вместо noun.get(question) или verb.get(question), но, очевидно, это невозможно.Я хочу сделать мой код более эффективным, чтобы пользователи могли получить доступ к HashMap, который не является «глаголом» или «существительным».

Я пытался просмотреть данные методы для строк, но ничего не подходит.Мне не очень повезло, и я нашел другие темы, которые решают эту проблему.

if(name.contains("verb")) {
    for(String question: verb.keySet()) {
        System.out.println(question);
        reader = new Scanner(System.in);
        hold = reader.nextLine();
        if(hold.equals(verb.get(question))) {
            System.out.println("CORRECT");
        } 
        else {
            System.out.println("INCORRECT");
        }
    }
} 
else if(name.contains("noun")) {
    for(String question : noun.keySet()) {
        System.out.println(question);
        hold = reader.nextLine();
        if(hold.equals(noun.get(question))) {
            System.out.println("CORRECT");
        } 
        else {
            System.out.println("INCORRECT");
        }
    }
}
else { System.out.println("not a set"); }

return "";

Прямо сейчас все печатается так, как ожидается для глагола и существительного.Клавиша печатается, другой пользовательский ввод, сохраненный в String hold, сравнивается со значением, связанным с клавишей, и печатает, если он правильный или нет, перед переходом к следующей клавише в HashMap.

1 Ответ

0 голосов
/ 19 февраля 2019

Ваш вопрос не ясен.Обновите вопрос с типами существительное, глагол и имя.Я предполагаю, что, насколько я понимаю, у вас есть две карты, в которых есть некоторые элементы.

Map<String, String> verb;
Map<String, String> noun;

Для оптимизации приведенного выше кода.Создайте метод, как показано ниже

private static void check(Map<String, String> map) {
   if(map != null){
       Scanner reader = new Scanner(System.in);
       map.forEach((key, value) -> {
          System.out.println(key);
          String hold = reader.nextLine();
          System.out.println(( hold.equals(value) ? "CORRECT" : "INCORRECT" ));
       });
   } else {
       System.out.println("not a set");
   }
}

И вызовите этот метод, как показано ниже

this.check(name.contains("verb") ? verb:name.contains("noun") ? noun : null);

Объяснение: При вызове метода check () мы передаем map на основе значения name.Карта может быть глаголом, существительным или NULL.

Если вы не знаете, как работает условный оператор, пожалуйста, найдите здесь

...