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

4

在 Java 中,String 不是原始值,你必须使用 String.equals() 来比较字符串,所以,改变这个:

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

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

我还建议您检查可空性并忽略大小写,因此:

String answer = answerEntered[x];
boolean isAnswerCorrect = 
        answer != null && 
            //remove trailling spaces and ignore case (a==A)
        answer.trim().equalsIgnoreCase(answers[x]);
if(isAnswerCorrect){
于 2013-06-11T16:35:08.187 回答
1

为了String比较,您需要使用equals而不是==,对于非原始数据类型,例如String,比较它们的引用,而不是值。

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

if (a.equals(b))
{
    //doSomething
}
于 2013-06-11T16:33:58.803 回答
1

对于StringJava 中的任何对象相等性测试,您几乎应该总是使用equals. 运算符仅在==与对象一起使用时比较引用(但将按照您期望的方式与 , 等原语一起使用intboolean;也就是说,它检查操作数是否都指向/引用同一个对象实例。您感兴趣的是比较实例的内容,并将为您执行此操作:Stringequals

if(answerEntered[x].equals(answers[x])) {
   ...
}
于 2013-06-11T16:34:49.523 回答
1

问题在于比较:

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

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

正如之前已经回答过的那样。

额外信息,在 if / else 的 for 循环中,您仅循环前 3 个位置,而不是answerEntered 数组中存在的 5 个位置。

干杯

于 2013-06-11T16:40:30.577 回答
0

用于.equals比较字符串。equals比较值,其中==比较参考。

于 2013-06-11T16:35:34.927 回答
0

在 Java 中,== 比较比较引用标识,意味着你比较的两个东西必须是同一个对象。具有相同值的两个对象被视为不同。

你声明:

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

answerEntered 包含的字符串与答案中的任何字符串都不同,即使它们具有相同的值。

Java 使用 Object 的 .equals 方法按值进行比较,即两个对象只要具有相同的值就相等。

改变:

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

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

应该解决问题。

另外,由于 answerEntered 包含用户输入的值,您最好在使用前对其进行预处理。例如,用户可能会在最后加上空格的答案“a”。您可能还想摆脱这些空间。

否则“a”将被视为错误答案。

于 2013-06-11T16:52:02.160 回答