【发布时间】:2017-12-12 16:04:20
【问题描述】:
我写了一个员工类,它有一个显示方法和构造函数。
public class employee {
public int empid;
public String name;
public employee(int id, String name){
empid = id;
this.name = name;
}
public void display (){
System.out.println("Employee id: " +empid +"\nEmployee name: "+name);
}
}
然后我创建了三个员工对象并将它们存储在主类的一个数组中。我创建了一个 if 块,它将检查用户猜测并打印员工详细信息(如果他存在),或者如果数据不存在则抛出异常。 if 块包含在一个增强的 for 循环中,该循环遍历数组。
public static void main(String[] args) {
// TODO code application logic here
employee priya = new employee (001, "Priya");
employee tamizh = new employee (002, "Tamizh");
employee hari = new employee (003, "hari");
employee[] list = new employee[3];
list[0] = priya;
list[1] = tamizh;
list[2] = hari;
int userGuess = 002;
for (employee l : list){
if (userGuess == l.empid)
{
l.display();
break;
}
else
{
throw new InputMismatchException ("employee doesnot exist");
}
}
}
}
麻烦的是,即使猜测正确,程序也会抛出异常。我尝试了 int 变量 empid,然后是 String 变量名,但 == 和 .equals 都不起作用。我搜索了stackoverflow,建议的解决方案是覆盖员工类中的hashcode和equals方法。我做到了。
public class employee {
public int empid;
public String name;
public employee(int id, String name){
empid = id;
this.name = name;
}
public void display (){
System.out.println("Employee id: " +empid +"\nEmployee name: "+name);
}
@Override
public int hashCode(){
final int prime = 31;
int result = 1;
result = prime * result + empid;
result = prime * result + name.hashCode();
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
employee other = (employee) obj;
if (this.empid != other.empid)
return false;
if (this.name.equals(other.name))
return false;
return true;
}
}
现在,当我将输入设为 001 时,代码可以正常工作。但是对于任何其他输入(包括现有的 empid 002 和 003),都会抛出异常。
我在覆盖中做错了什么?另外我不明白我为覆盖这两种方法而编写的代码。有人可以解释逻辑和我哪里出错了吗?谢谢。
编辑:谢谢大家。我已经意识到我在 for 循环中的错误,我已经编辑了它。现在完美运行。
int userGuess = 002;
boolean found = false;
for (employee l : list){
if (userGuess == l.empid)
{
l.display();
found = true;
break;
}
}
if(found == false){
try{
throw new InputMismatchException ("employee doesnot exist");
}
catch(InputMismatchException e){
System.out.println("Employee doesnot exist.");
}
}
非常感谢各位。有人可以解释我在 equals 和 hashcode 方法中所做的事情吗?我从答案中复制了代码,但找不到解释。再次感谢。
【问题讨论】:
-
数组中的第一个是001,所以它当然不等于002。不确定你要做什么。你这里没有使用 equals 方法。
-
您在循环中抛出异常,但您没有捕获它。所以它没有第二次循环。
-
@puterBoy 如果您用我的回答解释问题,我可以尝试纠正它。谢谢,
-
@isaace 我尝试了您的代码,但程序仍然退出 if 块并在第一次迭代后抛出异常。需要在 for 循环之外获取异常以使代码正常工作。
-
它在我的回答中的 for 循环之外。我看不出它是如何在第一次迭代后退出的..
标签: java arrays overriding