我的程序终止没有扫描字符串

时间:2013-07-23 18:17:07

标签: java java.util.scanner

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

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

2 个答案:

答案 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()调用读入任何内容。