根据对象类型的arraylist搜索特定输入

时间:2015-10-13 20:06:09

标签: java arraylist

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.
}
  

请问我该怎么办呢。

4 个答案:

答案 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.
}