0

私は基本的な電卓を作っています。Strings を比較しようとして を使用すると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);
        }

    }
}
4

4 に答える 4

3

それらは同じではありません。

next()およびメソッドは、nextInt()最初に区切り文字パターンに一致する入力をスキップしてから、次のトークンを返そうとします。このnextLine()メソッドは、現在の行の残りを返します。

たとえば、入力が の場合"123\nplus\n"、 を呼び出すとnextInt()が消費され123\nは待機状態になります。

この時点で、 への呼び出しはnext()をスキップして\nから を消費しplus、ファイナル\nを待機させます。または、 を呼び出すと、nextLine()が消費\nされ、空の文字列が行として返され、plus\nが待機状態になります。

またはを使用nextLine()した後に使用したい場合の答えは、への追加の呼び出しを挿入して、残った改行をフラッシュすることです。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

The reason one works and the other doesn't is... well, they aren't the same thing. They both exist for slightly different use cases.

Compare next() and nextLine() - nextLine() is expecting a line separator to terminate on which I presume your input doesn't have. However, the doc comment suggests it should work even without the terminating line separator, so you'll have to debug to find out exactly why it breaks for you.

于 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 に答える