这是我的计划:
class EmP
{
int id;
Emp(int id)
{
this.id=id;
}
int getId()
{
return id;
}
int find(Emp[] emp)
{
int i;
for(i=0;i<emp.length;i++)
{
if(emp[i]==emp[i])
return i;
else
return -1;
}
System.out.println("successfull");
}
public static void main(String args[])
{
Emp emp[]={new Emp(1),new Emp(2),new Emp(3)};
find(emp[0]);
}
}
此程序查找是否有数组中的员工对象。编译此程序时出错。我可以知道这个程序有什么问题吗?
答案 0 :(得分:5)
在提问时,您应始终告诉错误消息。那些东西存在是有原因的。但是,我认为这与此有关:
public class EmP {
在其他任何地方使用classname Emp
(注意小写“p”)。案例在Java中很重要,别忘了!还有另一种语法错误:
find(emp[0]);
find
不是static
方法,因此您需要在对象实例上调用它。此外,emp[0]
不是Emp[]
,因此参数类型不匹配。例如,emp[0].find(emp)
在语法上是正确的。
最后,您的find
方法在语义上不正确。
if(emp[i]==emp[i])
return i;
else
return -1;
您只是检查emp[i]
中的对象是否与自身相同。此外,如果不是,您将立即放弃搜索而不检查阵列的其余部分。改为使用this
对象,只有在搜索完整个数组后才返回-1
而没有找到匹配项。
你有很多需要解决的问题。
答案 1 :(得分:2)
这就是您查看编译器显示的错误的原因。 IDE甚至在您执行程序之前显示此信息,您只需要查看列表并进行修复。
EmP
,其他所有内容均为Emp
。find()
方法并不总是返回int
。如果for
循环没有执行,它将不会返回任何内容。if(emp[i]==emp[i])
没有多大意义。find()
需要Emp[]
,但会收到Emp
。find()
,但在该上下文中并不知道。find()
的结果。答案 2 :(得分:0)
@JeroenVannevel和@kviiri发现了大约5-6个问题。不想写同样的东西。根据{{1}}
我认为它应该是这样的:
This program finds if an employee object is present in array or not
输出:
public class EmP{
int id;
public EmP(int id){
this.id=id;
}
int getId(){
return id;
}
static boolean find(EmP[] emp, EmP target){
int i;
for(i=0;i<emp.length;i++){
if(emp[i].getId()==target.getId())
return true; // found
}
return false; // not found
}
public static void main(String args[]){
EmP emp[]={new EmP(1),new EmP(2),new EmP(3)};
EmP e = new EmP(1);
boolean status = find(emp, e);
System.out.println("the employee with id " + e.getId() + " found: " + status);
e = new EmP(7);
status = find(emp, e);
System.out.println("the employee with id " + e.getId() + " found: " + status);
}
}