我正在制作一个基本的计算器。当我尝试比较字符串并使用next()
时,它可以正常工作,但是如果我使用nextLine()
,它就不起作用。怎么会这样?不是next
和nextLine
几乎是一样的,只是一个跳过一行而另一个没有?
这是我的代码:
import java.util.Scanner;
class apples{
public static void main(String args[]){
Scanner Max = new Scanner(System.in);
int num1, num2, answer;
String plumi;
System.out.println("enter your first number");
num1 = Max.nextInt();
System.out.println("enter your second number");
num2 = Max.nextInt();
System.out.println("enter if you want to use plus or minus");
plumi = Max.next();
if(plumi.equals("plus")){
answer = num1 + num2;
System.out.println("the answer is " + answer);
}
if(plumi.equals("minus")){
answer = num1 - num2;
System.out.println("the answer is " + answer);
}
}
}
答案 0 :(得分:3)
他们不一样。
next()
和nextInt()
方法首先跳过与分隔符模式匹配的任何输入,然后尝试返回下一个标记。 nextLine()
方法返回当前行的其余部分。
例如,如果输入为"123\nplus\n"
,则对nextInt()
的调用将消耗123
,让\n
等待。
此时,对next()
的调用将跳过\n
,然后使用plus
,最后\n
等待。或者,对nextLine()
的调用将使用\n
并返回一个空字符串作为该行,让plus\n
等待。
如果您希望在使用nextLine()
或next()
之后使用nextInt()
,则应回答nextLine()
以清除剩余的换行符
答案 1 :(得分:1)
尝试使用此代码代替您的代码:
if(plumi.equals("plus")){
answer = num1 + num2;
System.out.println("the answer is " + answer);
}
else if(plumi.equals("minus")){
answer = num1 - num2;
System.out.println("the answer is " + answer);
}
else {
System.out.println(plumi);
}
然后尝试按照输入:
1 //press enter
2 plus //press enter
看看会发生什么,你会明白的。
答案 2 :(得分:0)
一个人工作而另一个不工作的原因是......好吧,他们不是一回事。它们都存在于略有不同的用例中。
比较next()
和nextLine()
- nextLine()
期待一个行分隔符终止,我认为你的输入没有。但是,文档注释表明即使没有终止行分隔符也应该可以工作,因此您必须进行调试才能找到它为您打破的具体原因。
答案 3 :(得分:-1)
乍一看,您的代码应该可行。要了解它为什么不起作用,您必须对其进行调试。如果您不知道如何使用调试器,请使用“穷人的调试器”:
System.out.println("enter if you want to use plus or minus");
plumi = Max.next();
System.out.println("You entered ["+plumi+"]"); // poor man's debugger
我引用[]
的值,因为它们很少是我要打印的值的一部分,它可以更容易地看到何时有其他意外的空格(如[ plumi]
或[plumi ]
)