2

私は初心者です。

私はjavawhileループを試しています。私はjavawhileループとifステートメントの両方の知識を持っていますが、これまでネストしたことはありません。最初にスクリプトを投稿してから、問題をお伝えします。

スクリプトは次のとおりです。

import java.util.Scanner;
class whileloop{
    public static void main(String args[]){
        Scanner scan = new Scanner(System.in);
    System.out.println("This is a basic calculator.");
    System.out.println("To exit, input exit when asked to input the method.");
    System.out.println("----------------------------------------------");
    while (true){
        System.out.println("to add, input '+', to subtract, input '-', to divide, input '/', to multiply, input '*' and to exit, input 'exit.'");
        System.out.println("----------------------------------------------------");
        System.out.print("Please enter a method here:");
        String method = scan.nextLine();
        if (method == "exit"){
            System.out.println("You chose to exit.");
            break;
        }
        else if (method == "+"){
            System.out.println("You chose to add.");
            System.out.print("Please enter first number here:");
            double fnum = scan.nextInt();
            System.out.print("Please enter second number here:");
            double snum = scan.nextInt();
            double ans = fnum + snum;
            System.out.print("The answer is");
            System.out.println(ans);
        }
    }
}
}

まず第一に、私は今実験しているこのタイプのネスティングについての知識がないので、おそらくそれが私の方法があなたの人々には少し珍しいように見えるかもしれない理由です。

ここで問題となるのは、このコードを実行するたびに、無限のwhileループは完全に機能しますが、入力内容に関係なく常にifステートメントをスキップし、命令のループを再開することです。

これで私を助けてください。

4

7 に答える 7

5

使用する

method.equalsIgnoreCase("exit")レイズよりmethod == "exit"

equalsIgnoreCaseコンテンツを比較しますが、参照を比較します。この場合、参照は、新しい文字列オブジェクトを作成するため==に使用しているものと同じではありません。scan.nextLine();

于 2012-07-27T09:54:37.710 に答える
5

文字列を比較するときは、.equals()メソッドを使用する必要があるため、この場合はに変更する必要がありmethod == "exit"ますmethod.equals("exit")if同じことが他のステートメントにも当てはまります。

文字列の比較の詳細については、このOracleチュートリアルを参照してください

于 2012-07-27T09:54:55.680 に答える
5

==文字列の比較に使用する場合、これはオブジェクトの参照を比較します。その場合、常にfalseが返されます。あなたにはelseがなく、実際にこれが起こっているのを見ていない場合にのみelseがあり、それが次の反復に続くからです。

.equals()参照ではなくオブジェクト値を比較するメソッドに変更します。

サイドノート

参照の同等性が使用されている奇妙な例を見たことがあるかもしれないので、参照の比較に注意してください(以下のこの例が示すように、私にとっては初めてのことです)。

String a = "Hello";
String b = "Hello";

この場合を比較するとa == b、実際にはtrueが返されます。これは、Javaが文字列をキャッシュするため、この場合は同じ参照を持つためです。このような例は例外であるため、注意してください。

于 2012-07-27T09:57:56.010 に答える
3

method.equals("exit")文字列の比較に使用します。

この投稿を参照してください。

于 2012-07-27T09:53:16.327 に答える
1

==オブジェクトのテスト参照の同等性。

equals(String)これは、2つの文字列の内容を比較するためのクラス内のメソッドです。String

于 2012-07-27T10:01:21.300 に答える
1

Javaでは、数値を除いて==、をチェックすることを意味します。(以下のコメントを参照)reference equality

Object obj1 = new Object();//toString: java.lang.Object@459189e1 <--|
                                                                  //|- different addresses
Object obj2 = new Object();//toString: java.lang.Object@55f33675 <--|
obj1 == obj2; //false, because they are difference objects, difference references.

obj1 = obj2;
obj1 == obj2; //true, they are now pointing to the same object

.equalsしたがって、文字列の同等性をチェックするために使用する必要があります。

于 2012-07-27T10:01:34.433 に答える
1

これはすべての初心者にとって問題です。私が始めたとき、私はそれをしました。ここでの問題は

等式演算子==

ここで2つの文字列を比較するために使用しないでください。これは、2つのオブジェクトをチェックするために使用されるため、違いはありませんが、同じインスタンスのものです。すなわち

Object O1 = new Object()
Object o2 = o1

ここ

o1 == o2

trueと評価されます。彼らは参照の同等性をチェックするからです。

文字列の場合、文字列の内容を比較するときは、常に次のいずれかと比較する必要があります。

等しい

メソッドまたは

equalsIgnoreCase

あなたが事件について気にならなければ。神のご加護を。乾杯。

于 2012-07-27T10:04:01.657 に答える