0

当我执行我的代码时,我的程序在不扫描字符串的情况下终止。

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(); 怎么会提前结束?

4

2 回答 2

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
于 2013-07-23T18:47:46.270 回答
0

最佳情况下,用户输入应如下所示:

-光标在这里- num1 NEWLINE

num2 换行

运营商 NEWLINE

如果您进行多次nextDouble()调用,程序将首先读取一个双精度数。

num1 -光标在这里- 换行

num2 换行

运营商 NEWLINE

然后,用户必须输入回车来提交输入,所以第二个nextDouble()找不到要读取的内容,因为光标后面没有数字。它需要nextLine()吸收换行符。

不幸的是,你有一个nextLine()错误的地方,它吸收了换行符。

num1 换行

-光标在这里- num2 NEWLINE

运营商 NEWLINE

因此,您的程序吸收了第一个中的双精度nextDouble(),第二个中没有任何内容,以及中的换行符nextLine()

要解决此问题,请scan.nextLine()在每个nextDouble(). 除了具有操作员的电话之外,您不必将nextLine()电话读入任何内容。

于 2013-07-23T20:00:16.740 回答