0

私はJavaを学ぶのが初めてです。私は約 1 週間前に学習を開始し、1 日約 10 時間学習に費やしました。「あるべき」場所から遅れているかどうかはわかりません (私が対処しているもう 1 つの懸念事項です)。おそらく最も効率的ではありませんが、どこかから始めなければなりません。先週読んだ情報の宇宙から、これらのほとんどをメモリ不足で入力しました。現在、プログラミングの概念を固めるのに役立つゲームやアプリを作ろうとしています。私が学んだことを使用して、この情報を関連性のあるものにすること。

私の質問は、本質的に、なぜ私の「if」ステートメントは「else」に直接行くのですか?

public class ClassSelect {

public static String className;

public static void pickPlayer() {

    Scanner scan = new Scanner(System.in);
    System.out.println("Pick your class." + "\n" + "[F]ighter" + "\n"
            + "[W]izard");
    String scanClass = scan.nextLine();

    if ((scanClass == "f") || (scanClass == "F")) {
        System.out.println("You picked the Fighter");
        String classNameF = "Fighter";
        className = classNameF;
        try {
            File file = new File("saveData.txt");
            BufferedWriter output = new BufferedWriter(new FileWriter(file));
            output.write(className);
            output.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    else if ((scanClass == "w") || (scanClass == "W")) {
        System.out.println("You picked the Wizard");
        String classNameW = "Wizard";
        className = classNameW;
        try {
            File file = new File("saveData.txt");
            BufferedWriter output = new BufferedWriter(new FileWriter(file));
            output.write(className);
            output.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    } else {
        System.out.println("You didn't choose either.");
    }
}
4

4 に答える 4

3

文字列比較には、クラスequalsのメソッドを使用する必要があります。Objectあなたのifステートメントは次のようになります-if(scanClass.equals("f"))...

==実際のオブジェクトではなく参照を比較することに注意してください。

于 2013-08-05T08:34:00.327 に答える
0

演算子 == は、2 つのオブジェクト参照変数がオブジェクトのまったく同じインスタンスを参照しているかどうかをテストします。

メソッド .equals() は、比較対象の 2 つのオブジェクトが等しいかどうかをテストしますが、同じオブジェクトのまったく同じインスタンスである必要はありません。そう

 if ((scanClass == "f") || (scanClass == "F")) 

false と評価され、制御は else ブロックに移ります。

于 2013-08-05T09:00:24.207 に答える
0

常に を使用して文字列を比較しequalsます。

  • == は参照を比較します。

  • 一方、 equals() は値を比較します。

    if ((scanClass.equals("f") || (scanClass.equals("F"))) 
    
于 2013-08-05T08:39:59.250 に答える
0

演算子は値ではなく参照を比較scanClass.equalsIgnoreCase("f")するため、if ステートメントで使用する必要が あります。==

于 2013-08-05T08:45:05.153 に答える