我看了一会儿,但我找不到完全相似的问题。我正在编写一个程序,让用户选择他们会被问到什么类型的问题,然后他们输入他们的答案。如果他们做对了,他们的分数就会增加一个点。当答案不正确时,我可以让它工作,但是当它们纠正时却不能。我知道这种情况正在发生,因为输入的字符串由于某种原因与正确答案的存储不匹配,但我无法弄清楚原因。这是代码的一部分:
System.out.println("What school do the Badgers belong to?");
mascotQuestion1 = scan.next();
if (mascotQuestion1.equalsIgnoreCase("University of Michigan")) {
score++;
}
else if (mascotQuestion1.equalsIgnoreCase("don't know")) {
score = (score + 0);
}
else {
score--;
}
基本上,if和else if语句不起作用。每个输入都被发送到else语句。问题是什么?
编辑:所以,我在进入密歇根大学"之后尝试打印输入的mascotQuestion1,然后又回来了#34;大学"。这就是错误的原因,但我不知道如何解决这个问题。
答案 0 :(得分:1)
如果您使用的是Java Scanner
,则需要指定在查看令牌时使用的分隔符模式。我相信它默认为空格,因此当您的用户输入文本时,scanner.next()
应检索它找到的第一个完整单词。
考虑使用BufferedReader
,您可以使用reader.readLine()
方法。
答案 1 :(得分:1)
试试scan.nextLine()
。我认为scan.next()
只会给你下一个字。
答案 2 :(得分:0)
首先,你不需要" if else"因为score = (score + 0)
绝对没有
这极大地简化了代码:
if (mascotQuestion1.equalsIgnoreCase("University of Michigan")) {
score++;
} else {
score--;
}
答案 3 :(得分:0)
scan.next()将简单地读取下一个单词(更具体地说是一个标记),因为它默认使用空格作为分隔符。您可以使用scan.nextLine()。
但最好根据您的要求使用BufferedReader而不是Scanner。它会让你使用readLine()一次读取一行。
以下是您可以做的事情:
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("What school do the Badgers belong to?");
mascotQuestion1 = br.readLine();
if (mascotQuestion1.equalsIgnoreCase("University of Michigan")) {
score++;
}
else if (mascotQuestion1.equalsIgnoreCase("don't know")) {
score = (score + 0);
}
else {
score--;
}
有关Scanner和BufferedReader的更多信息,请参阅此文章 Scanner vs. BufferedReader