当我执行我的代码时,我的程序终止而不扫描字符串。
double x, y;
String s;
Scanner scan = new Scanner(System.in);
System.out.println("Enter Number: ");
x = scan.nextDouble();
System.out.println("Enter Number 2: ");
y = scan.nextDouble();
System.out.println("Enter Operater: x,+,/,-");
s = scan.nextLine();
if(s.equals("x"))
{
System.out.print(x * y);
}
else if(s.equals("+"))
{
System.out.print(x + y);
}
else if(s.equals("/"))
{
System.out.print(x / y);
}
else if(s.equals("-"))
{
System.out.print(x - y);
}
scan.close();
我的计划在s = scan.nextline();
之前结束
怎么结束呢?
答案 0 :(得分:1)
您在缓冲区中留下的行尾。
next( )
从缓冲区读取一个令牌,直到下一个空格,而nextLine( )
读取到\n
...
System.out.print("Enter Number 2: ");
y = scan.nextDouble();
System.out.print("Enter Operater: x,+,/,-");
s = scan.next();
...
Enter Number: 1
Enter Number 2: 2
Enter Operater: x,+,/,--
-1.0
答案 1 :(得分:0)
最佳用户输入如下所示:
- CURSOR HERE - num1 NEWLINE
num2 NEWLINE
运营商NEWLINE
如果您进行多次nextDouble()
次呼叫,该程序将首先读取一个双倍。
num1 - CURSOR HERE - NEWLINE
num2 NEWLINE
运营商NEWLINE
然后,用户必须输入一个输入来提交输入,因此第二个nextDouble()
找不到任何要读取的内容,因为光标后面没有数字。它需要nextLine()
来吸收换行符。
不幸的是,你在错误的地方有一个nextLine()
,它吸收换行符。
num1 NEWLINE
- CURSOR HERE - num2 NEWLINE
运营商NEWLINE
所以,你的程序吸收了第一个nextDouble()
中的双精度数,第二个中没有任何内容,以及nextLine()
中的换行符。
要解决此问题,请在每个scan.nextLine()
之后放置nextDouble()
。除了拥有运算符的调用之外,您不必将nextLine()
调用读入任何内容。