0

我正在制作一个基本的计算器。当我尝试比较字符串并使用next()时,它工作正常,但是如果我使用nextLine(),它就不起作用。怎么会这样?不是nextnextLine实际上是一回事,只是一个跳过一行而一个不跳过?

这是我的代码:

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);
        }

    }
}
4

4 回答 4

3

他们不一样。

next()and方法首先跳过与分隔符模式匹配的nextInt()任何输入,然后尝试返回下一个标记。该nextLine()方法返回当前行的其余部分。

例如,如果输入是"123\nplus\n",则调用nextInt()将消耗123,让\n等待。

此时,对 的调用next()将跳过\n,然后使用plus,让 final\n处于等待状态。或者,调用nextLine()将消耗 the\n并返回一个空字符串作为行,让 theplus\n等待。

如果您希望在使用ornextLine()之后使用,答案是插入一个额外的调用来刷新剩余的换行符。next()nextInt()nextLine()

于 2013-06-11T15:10:02.447 回答
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

看看会发生什么,你就会明白。

于 2013-06-11T15:11:22.410 回答
0

一个有效而另一个无效的原因是……好吧,它们不是一回事。它们都存在于稍微不同的用例中。

比较next()nextLine()-nextLine()期望行分隔符终止,我认为您的输入没有。但是,文档注释表明即使没有终止行分隔符,它也应该可以工作,因此您必须进行调试才能准确找出它为什么会中断。

于 2013-06-11T15:07:58.273 回答
-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 ]

于 2013-06-11T15:06:56.943 回答