LinkedHashMap get (key) возвращает ноль, даже если значение присутствует - PullRequest
0 голосов
/ 08 апреля 2020

Задача состоит в том, чтобы запросить определения некоторых случайных карт. После того, как я ввел карточки и получил доступ к этому методу, значение, соответствующее ключу, присутствует, и оно все еще возвращает ноль.

pair.get (a) всегда печатает ноль

  public static void ask() {
        System.out.println("How many times to ask?");
        int ask = scan.nextInt();
        scan.nextLine();

        Random random = new Random();
        Object[] values = pair.keySet().toArray();
        int retur = random.nextInt(values.length);
        int i = 0;
        for (String iterator : pair.keySet()) {
            if (i <= ask) {
                System.out.println("Print the definition of \"" + values[retur] + "\":");
                String a = scan.nextLine();
                System.out.println(a.equals(pair.get(values[retur])) ? "Correct answer." :
                        "Wrong answer. The correct one is \"" + pair.get(values[retur]) +
                                "\", you've just written the definition of \"" + pair.get(a)  + "\".");
            }else
                break;
        }

1 Ответ

0 голосов
/ 08 апреля 2020

Если я правильно понимаю ваш код, проблема в том, что вы пытаетесь получить значение с помощью pair.get(a), используя другое значение a (которое может даже не существовать, поскольку оно зависит от ввода пользователя!).

Предполагая, что вы все еще хотите достичь этой функциональности, вам нужно что-то в этом роде.

// Get the key referenced by a (if exists)
var aKey = pair.entrySet()
               .stream()
               .filter(entry -> a.equals(entry.getValue()))
               .map(Map.Entry::getKey)
               .findFirst();

// If the key for value a does not exist, print incorrect input (you can handle this however you like), otherwise print original statement
if (aKey.isEmpty()) {
    System.out.println("Incorrect input!");
} else {
    System.out.println(a.equals(pair.get(values[retur])) ? "Correct answer." :
                        "Wrong answer. The correct one is \"" + pair.get(values[retur]) +
                                "\", you've just written the definition of \"" + pair.get(aKey.get())  + "\".");
}
...