【发布时间】:2015-05-01 08:21:24
【问题描述】:
我有一个类 Person 带有名字和姓氏,还有一个类 Student 带有平均成绩和期末成绩,它们继承了 Person。
public class Student extends Person
{
private double HomeworkAve;
private double QuizAve;
private double ProjectAve;
private double TestAve;
private double FinalGrade;
private String LetterGrade;
public Student(){}
public Student(String FName, String LName, double HomeworkAve, double QuizAve, double ProjectAve, double TestAve) {
super(FName, LName);
this.HomeworkAve = HomeworkAve;
this.QuizAve = QuizAve;
this.ProjectAve = ProjectAve;
this.TestAve = TestAve;
}
public void setHomeworkAve(double HomeworkAve) {
this.HomeworkAve = HomeworkAve;
}
public void setQuizAve(double QuizAve) {
this.QuizAve = QuizAve;
}
public void setProjectAve(double ProjectAve) {
this.ProjectAve = ProjectAve;
}
public void setTestAve(double TestAve) {
this.TestAve = TestAve;
}
我希望能够按姓名搜索学生,所以在我的主课中,我使用了这个:
for (int i = 0; i < aloStudent.size(); i++) {
String xsFirstName = aloStudent.get(i).getFName();
if (xsFirstName.equals(xsFName) == true)
{
System.out.println("found");
}
}
在调试时,我注意到xsFirstName 具有正确的值,但是当它与xsFName(这是用户的输入)进行比较时,它会跳过println。我做错了什么?
【问题讨论】:
-
仅从上面的代码很难判断。要检查的一件事是“用户的输入”(我假设是 xsFName)不包含前导或尾随空格。这会使比较失败。尝试将 trim() 应用于输入。另外,上面的“==true”也不是必须的。
-
你为什么要这样做
.equals(xsFName)== true????.equals()本身将为您提供if条件的真或假。另外,您是否使用if(xsFirstName.intern().equals(xsFName)){......}...进行检查?另外,在您的调试中,您是否发现用户输入的值是什么?鉴于您的代码 sn-p,除非您可以报告用户输入不同,否则很难判断发生了什么。您似乎正确使用了.equals()....检查用户输入xsFName -
如果您不想要区分大小写的比较,您可以使用 String.equalsIgnoreCase() 方法或将两个字符串转换为大写/小写,然后使用 String.equals()。
-
添加修剪不起作用,我拿出了比较。是的,我看到了变量中保存的值,并且没有多余的空格,并且它们都保存了相同的字符串。
-
您不能提供示例输入和示例
aloStudent内容,因为......?如果没有它,我们应该如何重现您的问题?