字符串输入问题?

时间:2014-09-30 23:14:59

标签: java string input

我看了一会儿,但我找不到完全相似的问题。我正在编写一个程序,让用户选择他们会被问到什么类型的问题,然后他们输入他们的答案。如果他们做对了,他们的分数就会增加一个点。当答案不正确时,我可以让它工作,但是当它们纠正时却不能。我知道这种情况正在发生,因为输入的字符串由于某种原因与正确答案的存储不匹配,但我无法弄清楚原因。这是代码的一部分:

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;大学"。这就是错误的原因,但我不知道如何解决这个问题。

4 个答案:

答案 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