0

私はまだJavaに慣れていません。ユーザーが多肢選択式クイズに答える必要があるプログラムを作成しようとしています。ユーザーは回答を入力し、これらの入力は配列に形成されます。次に、for ループを使用してユーザーの回答配列を正しい回答の配列と比較し、ユーザーが正しいか間違っているかを伝える予定です。

ただし、if ステートメントで 2 つの配列を適切に比較していないようです。プログラムを実行するたびに、else ステートメントに直接進みます。

私の推測では、スキャナー クラスは実際には値を格納していないのでしょうか?

誰でも助けることができますか?

以下のコードの一部:

//Above this section is just a collection of "System.out.println" statements that state questions and answers the user choose from.




     int x;
                String answers [] = {"a", "a", "b"}; 
    //answers array has the correct answer 
                Scanner in = new Scanner(System.in);
                String answerEntered [] = new String [5]; 
    //user input will be in this arra

                for(x=0 ; x<3 ; x++)
                {
                    System.out.print((1+x)+". ");
                    answerEntered[x] = in.nextLine();
                }
                for( x=0; x<3; x++)
                {   

                    **if(answerEntered[x] == answers[x])
                    {
                        System.out.println("For Question "+(x+1)+", you are Correct!");
                    }**
     //This if section does not seem to work. Every time i run the code it automatically goes to the else statement. 

                    else
                    {
                        System.out.println("The correct answer for Question "+(x+1)+" is: "+answers[x]);
                    }
                }
4

6 に答える 6

1

問題は比較にあります:

String a = "foo";
String b = "bar";

if (a.equals(b))
    //doSomething

以前に回答済みです。

追加情報、if / else の for ループでは、answerEntered 配列に存在する 5 ではなく、最初の 3 つの位置のみをループしています。

乾杯

于 2013-06-11T16:40:30.577 に答える
1

比較のために、の代わりにStringを使用する必要があります。これは、 などの非プリミティブ データ型の場合、値ではなく参照を比較します。equals==String

String a = "foo";
String b = "bar";

if (a.equals(b))
{
    //doSomething
}
于 2013-06-11T16:33:58.803 に答える
0

.equals文字列を比較するために使用します。equals値を==比較します。ここで、参照を比較します。

于 2013-06-11T16:35:34.927 に答える
0

Java では、== 比較は参照 ID を比較します。つまり、比較する 2 つのものが同じオブジェクトでなければなりません。同じ値を持つ 2 つのオブジェクトは異なるものとして扱われます。

あなたの声明:

if(answerEntered[x] == answers[x])

answerEntered には、同じ値であっても回答内のどの文字列とも異なる文字列が含まれています。

Java は、オブジェクトの .equals メソッドを使用して値で比較します。つまり、2 つのオブジェクトは、値が同じである限り等しいということです。

変化:

if(answerEntered[x] == answers[x])

if(answerEntered[x].equals(answers[x])) 

問題を解決する必要があります。

また、 answerEntered にはユーザーが入力した値が含まれているため、使用する前に前処理することをお勧めします。たとえば、ユーザーは末尾にスペースを入れて「a」という回答を入力する場合があります。これらのスペースも削除したい場合があります。

そうしないと、「a」が不正解として扱われます。

于 2013-06-11T16:52:02.160 に答える