2016-05-14 11 views
0

Ich habe eine Methode, die in einer ArrayList sucht, was Objekte mit zwei privaten Feldern enthält. Hier ist die Methode:ArrayList String Eingabe

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

Es ist gut funktionieren, wenn ich es wie folgt verwenden:

searchContactName("xyName"); 

Aber wenn ich versuche, es mit einem scenner.next() zu verwenden, wie thins, für den gleichen Namen

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

Es gibt mir -1. Ich verstehe nicht, muss ich irgendwie die Eingabe formatieren? Es ist der gleiche Typ oder es ist irgendwie anders, wenn ich den Scanner benutze?

+1

Änderung 'contacts.get (i) .getName() == name' zu 'contacts.get (i) .getName(). equals (name)' – SMA

+0

Haben Sie versucht, 'scanner.nextLine()' zu verwenden? Sie sollten nur die gleiche Eingabe erhalten, da nextLine() explizit einen String zurückgibt. – Siavas

+1

verwenden equals() Methode – Akceptor

Antwort

0

Der Operator == überprüft, ob zwei Objekte die gleiche Instanz des Objekts sind, was bei hartcodierten Zeichenfolgenliteralen der Fall ist. Der richtige Weg, dies zu überprüfen, ist jedoch mit der equals Methode, die prüft, ob zwei Objekte den gleichen Wert haben:

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

immer String.Equals verwenden() anstelle von ==

sollte Ihr Scheck

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

sehen dies auch aus Gründen, warum Sie nicht == Java String.equals versus ==

0

Versuchen mit

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

Und:

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

Welches Problem würde 'Next' zu' NextLine' lösen? – Pshemo

0

Sie verwenden sollten gleich Methode Zeichenfolgen vergleichen Werte

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() Wird Objekt in Arraylist zurück. In Ihrem Fall ist es nicht genau Name. Sie sollten die Methode getName() für das Objekt aufrufen, das Sie von scanner.next() erhalten haben. Überprüfen Sie den Code "contacts.get (i) .getName()", den Sie geschrieben haben, wo er funktioniert

+0

"Sie sollten die Methode getName() für das Objekt aufrufen, das Sie von scanner.next() erhalten haben" ergibt keinen Sinn. 'Scanner' wird immer benutzt, um Eingaben zu suchen, die Text darstellen, also kann' next' nur 'String' zurückgeben (was technisch ein Objekt ist), aber die String-Klasse hat keine' getName() 'Methode. Könnten Sie Ihre Antwort klären? – Pshemo

+0

Zustimmen. Mein Fehler. Falsch interpretiert. –

Verwandte Themen