[英]Java if statement not comparing to the variable
这是另一个学校项目,主要班级生成两个随机数,然后将其显示为加法问题。 然后,用户必须输入两个数字的总和。 程序应该将输入内容与正确答案进行比较,但是每次输入正确答案时,它都说错了吗?
主类:
import java.util.Random;
public class MathQuiz
{
private int answer1, answer2, answer3, answer4, answer5, n1, n2, sum, score, scoreFinal;
private String message, m2, m3, m4, m5, finalPage;
public MathQuiz()
{
}
Random dice1 = new Random();
public void setN1()
{
n1 = dice1.nextInt(100);
}
public void setN2()
{
n2 = dice1.nextInt(100);
}
public void setSum()
{
sum = n1+ n2;
}
public int getN1()
{
return n1;
}
public int getN2()
{
return n2;
}
public int getSum()
{
return sum;
}
public String getAnswer1(String a1)
{
if (a1.equals(getSum()))
{
message = "Correct";
score++;
}
else
{
message = "Incorrect";
}
return message;
}
public String getAnswer2(String a2)
{
if (a2.equals(getSum()))
{
m2 = "Correct";
score++;
}
else
{
m2 = "Incorrect";
}
return m2;
}
public String getAnswer3(String a3)
{
if (a3.equals(getSum()))
{
m3 = "Correct";
score++;
}
else
{
m3 = "Incorrect";
}
return m3;
}
public String getAnswer4(String a4)
{
if (a4.equals(getSum()))
{
m4 = "Correct";
score++;
}
else
{
m4 = "Incorrect";
}
return m4;
}
public String getAnswer5(String a5)
{
if (a5.equals(getSum()))
{
m5 = "Correct";
score++;
}
else
{
m5 = "Incorrect";
}
return m5;
}
public String getLast()
{
scoreFinal = score * 20;
finalPage = "Finished! Your score is " + scoreFinal + "%";
return finalPage;
}
}
JOptionPane的:
import javax.swing.JOptionPane;
public class Dialog
{
public static void main(String[] args)
{
String A1, A2, A3, A4, A5;
int a1, a2, a3, a4, a5;
MathQuiz quiz = new MathQuiz();
JOptionPane.showMessageDialog(null, "Answer these 5 math questions...");
quiz.setN1();
quiz.setN2();
quiz.setSum();
A1 = JOptionPane.showInputDialog(quiz.getN1() + " + " + quiz.getN2());
JOptionPane.showMessageDialog(null, quiz.getAnswer1(A1));
quiz.setN1();
quiz.setN2();
quiz.setSum();
A2 = JOptionPane.showInputDialog(quiz.getN1() + " + " + quiz.getN2());
JOptionPane.showMessageDialog(null, quiz.getAnswer1(A2));
quiz.setN1();
quiz.setN2();
quiz.setSum();
A3 = JOptionPane.showInputDialog(quiz.getN1() + " + " + quiz.getN2());
JOptionPane.showMessageDialog(null, quiz.getAnswer1(A3));
quiz.setN1();
quiz.setN2();
quiz.setSum();
A4 = JOptionPane.showInputDialog(quiz.getN1() + " + " + quiz.getN2());
JOptionPane.showMessageDialog(null, quiz.getAnswer1(A4));
quiz.setN1();
quiz.setN2();
quiz.setSum();
A5 = JOptionPane.showInputDialog(quiz.getN1() + " + " + quiz.getN2());
JOptionPane.showMessageDialog(null, quiz.getAnswer1(A5));
JOptionPane.showMessageDialog(null, quiz.getLast());
}
}
传递给getAnswerX()
方法的答案是字符串,您正在将它们与整数进行比较。 String
类的.equals()
方法返回false,因为参数是另一种类型,即int原语。 您可以使用Integer.parseInt()将字符串转换为Integer,也可以在比较它们之前使用Integer.toString()将整数转换为String。
这样的事情应该更好地工作:
public String getAnswer1(String a1)
{
if (Integer.parseInt(a1) == getSum())
{
message = "Correct";
score++;
}
else
{
message = "Incorrect";
}
return message;
}
您正在将String
与代码中的int
比较,这不等于。 尝试更改您的比较
a1.equals(getSum())
至
a1.equals(getSum().toString())
为了比较一个字符串和一个字符串。
您正在尝试将整数与字符串进行比较
尝试改变
a1.equals(getSum())
至
a1.equals(String.valueOf(getSum()))
步骤1:与其让用户问五个问题,不如问他们一个问题。 这将极大地加快调试速度。 一旦您的代码起作用,请使其成为五个问题。
第2步:使用仅询问一个问题的代码,然后您就可以进行更简单的更改Integer.toString()并计算答案,如Asaph所述。 您不会感觉到性能下降。
在撰写本文时,有两个答案,两个都是正确的。 尝试某些事情的第一要务。 许多人来这里寻找专业人士为他们做功课。
以下是一些可以改善代码的思考:
1)一致的缩进将帮助您阅读代码。 2)为什么需要这么多的getAnswer方法,只需要一个,而不是1-5。 3)您应该检查getAnswer方法的String参数是否为null,否则将获得null指针异常。
还有其他一些事情,但是现在可以使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.