Java:无法让.equals()工作

时间:2015-12-04 22:46:27

标签: java equals

我想制作一个基本游戏,其中生成两个随机数,用户必须输入正确的产品。

我做错了什么?感谢

import java.util.Scanner; 
import java.awt.*;

public class Userinput {

    public static void main (String[] args) {
        String firstName;

        //Create scanner to obtain user input
        Scanner scanner1 = new Scanner( System.in );
        int a,  b, correctAnswer;
        a=(int) (Math.random()*10);
        b=(int) (Math.random()*10); 

        //obtain user input
        System.out.println("Enter your first name: ");
        firstName = scanner1.nextLine();

        //output information
        System.out.print("Hello " + firstName + " ");
        System.out.println("what is " + a +" times " + b);
        String answer1 = scanner1.nextLine();
        correctAnswer = a * b;
        if ((answer1).equals(correctAnswer))
            System.out.println("Correct!");
        else if (!(answer1).equals ("correctAnswer"));
            System.out.println("Incorrect!");
    }
}    

3 个答案:

答案 0 :(得分:5)

您正在将Stringanswer1)与IntegercorrectAnswer)进行比较。那是比较苹果和橘子,它们永远不会相同。

您需要将String转换为int

Integer.parseInt(answer1)

如果answer1无法解析为整数,则可能会失败;或将int转换为String

Integer.toString(correctAnswer)

然后比较它们:

Integer.parseInt(answer1) == correctAnswer  // You can use == because int is primitive.
  or
answer1.equals(Integer.toString(correctAnswer))

答案 1 :(得分:0)

这就是问题所在:

if ((answer1).equals(correctAnswer))
    System.out.println("Correct!");
else if (!(answer1).equals ("correctAnswer"));
    System.out.println("Incorrect!");
}

请改为:

Integer answer = Integer.parseInt( answer1 );
if (answer1.equals(correctAnswer)) {
    System.out.println("Correct!");
} else {
    System.out.println("Incorrect!");
}

目前的写作方式,"不正确!"因为else if上的分号,所以总会被打印出来。此外,它将answer1与文字字符串" correctAnswer"进行比较。因为报价。由于它们甚至不是相同的类型(int和String),equals(...)返回false。我还建议使用花括号。它有助于缓解其中一些问题。

答案 2 :(得分:0)

试试这个:

int answer1 = scanner1.nextInt();
int correctAnswer = a*b;
if (answer1==correctAnswer) {
  System.out.println("Correct!");
} else {
  System.out.println("Incorrect!");
}

您的代码存在一些问题,主要与混合使用字符串和整数有关。 Here is a good explanation如何比较不同的数据类型。我建议您使用Scanner.nextInt()来保存必须将字符串转换为整数。

我还建议您不要省略if语句中的大括号。它使您的代码更易于阅读,并且可以避免一些混淆,特别是当您刚开始使用Java时。