public void searchWatch(long srch){
long s = srch;
boolean found = false;
for(int i = 0; i<watchStore.size();i++){
Watch fd = watchStore.get(i);
if(fd.equals(s)){
System.out.print("item found");
found = true;
}
if(!found){
System.out.println("no such record");
}
}
}
这是我班上的一个代码片段。我的问题是,我想测试一个类型为long的特定输入,类型为Watch类型的arraylist。序列号是否存在于arraylist中。
但由于错误而导致失败&#34; .equal()对不兼容的类型&#34;上面的代码是什么问题
以下是修订后的代码
public Watch findWatchBySerialNumber(long srch){
long s = srch;
Watch watch = null;
for(int i = 0; i<watchStore.size();i++){
watch = watchStore.get(i);
if(watchStore.contains(s)){ // this pop an error called suspicious call to java.utit.Collection.contains
System.out.print("item found");
return watch;
}
}
System.out.print("item not found");
return null; // watch is not found.
}
请问我该怎么办呢。
答案 0 :(得分:2)
当您执行if(fd.equals(s)){
时,您尝试将A String
与另一个Watch
类型的对象匹配,这就是您收到错误的原因。
您需要获取fd
的字符串表示形式,然后将其与s
匹配。
答案 1 :(得分:0)
替换:
Watch fd = watchStore.get(i);
使用:
Watch fd = watchStore.get(i);`
// use getter method
String fdString = fd.getSerial();
if(fdString.equals(s)){
System.out.print("item found");
found = true;
}
看看是否有帮助。
答案 2 :(得分:0)
'fd'是 Watch 的对象,而's'是 String 的对象。由于这些是两个不同的类,因此运行fd.equals会引发错误。 要使其工作,请尝试覆盖Watch类中的toString()方法,然后执行
fd.toString().equals(s)
答案 3 :(得分:0)
如果您尝试按序列号查找,则:
public void searchWatch (long srch){
boolean isFound = false;
Watch fd = null; // declaring variable out of the loop is better.
for(int i = 0; i<watchStore.size();i++){
fd = watchStore.get(i);
if(fd.getSerialNumber.equals(srch)){
System.out.print("item found");
isFound = true;
}
if(!found){
System.out.println("no such record");
}
}
}
我的建议:如果您将方法名称写为搜索或查找,则应返回一个对象。如果您只需要知道“它是否存在”,您可以为您的方法命名:isWatchExist()
并添加一个布尔返回类型。
public boolean isWatchExist (long serialNumber) {
Watch watch = null; // declaring variable out of the loop is better.
for(int i = 0; i < watchStore.size(); i++){
watch = watchStore.get(i);
if(watch.getSerialNumber.equals(serialNumber)){
System.out.print("item found");
return true;
}
}
System.out.println("no such record");
return false;
}
如果需要查找对象,则应添加对象的返回类型。给出一个明确描述方法目标的名称。
public Watch findWatchBySerialNumber (long serialNumber){
boolean isFound = false;
Watch watch = null; // declaring variable out of the loop is better. and name of you variable should describe your object, same name is better.
for(int i = 0; i < watchList.size(); i++){ // your list name should be "watchList".
watch = watchList.get(i);
if(fd.getSerialNumber.equals(serialNumber)){
System.out.print("item found");
return watch;
}
}
System.out.print("item not found");
return null; // watch is not found.
}