Задача состоит в том, чтобы запросить определения некоторых случайных карт. После того, как я ввожу карты и получаю доступ к этому методу, значение, соответствующее ключу, присутствует, и оно по-прежнему возвращает null.
Pair.get(a) всегда печатает null
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 ответ
Если я правильно понимаю ваш код, проблема здесь в том, что вы пытаетесь получить значение с помощью 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()) + "\".");
}
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.
pair.get(a)
? Ключa
не обязательно будет в вашем словаре, насколько я могу судить. Он не исходит из массиваvalues
.a
- это то, что было введено в консоли. Это может быть что угодно. Кроме того, если ваши ключи в словаре не являются строками,pair.get(a)
всегда будет возвращатьnull
.