ArrayList字符串输入

时间:2016-05-14 10:44:26

标签: java arraylist input

我有一个方法,它在ArrayList中搜索包含两个私有字段的对象。这是方法:

public int searchContactName(String name){

    int foundIndex =-1;
    for(int i = 0; i < contacts.size(); i++){
        if(contacts.get(i).getName() == name){
            foundIndex = i;
        }
    }

    return foundIndex;
}

如果我像这样使用它,它的效果很好:

searchContactName("xyName");

但是,如果我尝试将它与scenins.next()一样使用,那就是同名的

String name = scanner.next();
searchContactName(name);

它给我-1。我不明白,我需要以某种方式格式化输入?它是相同的类型,或者如果我使用扫描仪,它会有所不同吗?

5 个答案:

答案 0 :(得分:0)

始终使用String.equals()而不是==

您的支票应

  if(contacts.get(i).getName().equals(name))

也会看到这一点,原因是您不应该使用== Java String.equals versus ==

答案 1 :(得分:0)

尝试

String name = scanner.nextline(); searchContactName(name);

if(contacts.get(i).getName().equalsIgnpreCase ( name)) ...

答案 2 :(得分:0)

您应该使用equals方法来比较字符串值

aggregate

答案 3 :(得分:0)

==运算符检查两个对象是否是对象的同一个实例,对于硬编码的字符串文字,这恰好是真的。然而,正确的检查方法是使用equals方法,该方法测试两个对象是否具有相同的值:

public int searchContactName(String name){

    int foundIndex =-1;
    for (int i = 0; i < contacts.size(); i++){
        if (contacts.get(i).getName().equals(name)) { // here!
            foundIndex = i;
        }
    }

    return foundIndex;
}

答案 4 :(得分:-1)

scanner.next()将在ArrayList中返回Object。在你的情况下,它不完全是名字。你应该在你从scanner.next()获得的对象上调用getName()方法。验证您编写的代码“contacts.get(i).getName()”