2016-05-14 215 views
0

我有一个方法,该方法在ArrayList中搜索包含具有两个私有字段的对象的内容。下面是方法: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"); 

但是,如果我试图用scenner.next()之类变薄使用它,对同一名称

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

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

+1

变化'contacts.get(ⅰ).getName()== name'到'contacts.get(i).getName()。equals(name)' – SMA

+0

你试过用'scanner.nextLine()'吗?只有nextLine()显式返回一个字符串才能得到相同的输入。 – Siavas

+1

使用equals()方法 – Akceptor

回答

0

==运算符检查两个对象是否是该对象的同一实例,硬编码字符串常常为true。检查此所述正确方式,但是,是与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; 
} 
0

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

你的检查应该是

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

也看到这个的原因,为什么你不应该使用== Java String.equals versus ==

0

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

And:

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

比较字符串会改变什么问题'next'到'nextLine'解决? – Pshemo

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)){ 
      foundIndex = i; 
     } 
    } 

    return foundIndex; 
} 
-1

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

+0

“您应该从scanner.next()获得的对象上调用getName()方法”没有意义。 'Scanner'总是用来扫描代表文本的输入,所以'next'只能返回'String'(这在技术上是Object),但String类没有'getName()'方法。你能否澄清你的答案? – Pshemo

+0

同意。我的错。错误的解释。 –