2016-09-20 4 views
2

Ich habe Probleme mit dem Vergleich von zwei Strings in meiner Schleife.Vergleichen von zwei Strings in ArrayList

Angenommen, ich möchte zwei Wörter in eine ArrayList einfügen. Ich beschreibe beide Wörter über inputDialogeBox und lege sie in die Liste. Wenn die beiden Wörter identisch sind, wird das zweite Wort nicht zur Liste hinzugefügt.

Aber wenn ich die zwei Zeichenfolgen vergleiche, scheint das Programm nicht zu interessieren, wenn sie identisch sind und beide in der Liste enden.

Heres mein Code:

package testing; 

import javax.swing.*; 

public class Testing { 

    public static void main(String[] args) { 
     Word c = new Word(); 

     // word 1 
     String word; 
     word = JOptionPane.showInputDialog("Write a word: "); 
     System.out.println("word1 = " + word); 
     c.setWord(word); 

     // word 2 
     word = JOptionPane.showInputDialog("Write a new word: "); 
     System.out.println("word2 = " + word); 
     c.setWord(word); // sätt kortet≤ 

     System.out.println("words = " + c.getWord().size() + " " + c.getWord()); 
    } 
} 

Und meine Klasse:

package testing; 

import java.util.ArrayList; 

public class Word { 

    ArrayList<String> words = new ArrayList<>(); 

    public void setWord(String word) { 
     // set first value in arraylist to start the loop 
     if (words.isEmpty()) { 
      words.add("default"); 
     } 

     for (int i = 0; i < words.size(); i++) { 
      if (!words.get(i).equals(word)) { 
       words.add(word); 
       System.out.println("words.get(i): " + words.get(i) + " word: " + word); 
       break; 
      } 
     } 
    } 

    public ArrayList getWord() { 
     return words; 
    } 
} 

Meine Vermutung ist, dass das Problem um, das ich hinzufügen, ein Default, nur um etwas zu bekommen mit einer Schleife. Ansonsten, wenn die ArrayList leer ist, kann ich meine Schleife nicht starten. Aber vielleicht gibt es einen besseren Weg?

Dank

+2

Sie fügen das Wort der Liste hinzu, wenn * irgendwelche * Wörter in der Liste vorhanden sind, die nicht das Wort ist. – Andreas

+0

Entschuldigung. Ich bin ein Anfänger :-)
1) Wenn die ArrayList ist leer - fügen Sie einen ersten Wert in die Liste 2) Ich Schleife durch diesen einzigen Wert. 3) Wenn die Zeichenfolge (Standard) nicht mit dem ersten Wort übereinstimmt, wird das erste Wort der ArrayList hinzugefügt 4) Wenn die Zeichenfolge (Standard und word1) nicht das zweite Wort ist, wird sie der ArrayList hinzugefügt Aber ich denke, ich vermassle es :-) – acroscene

+2

Wenn Sie Dubletten verhindern wollen, verwenden Sie ein Set, keine Liste. –

Antwort

1

Das Problem ist, dass Sie nicht für alle Werte prüfen, wird nur eins nach dem anderen. Für das erste Wort prüfen Sie gegen 'Standard' und fügen Sie der Liste hinzu. Für das zweite Wort prüfen Sie zuerst mit "default", und da dies nicht gleich ist, fügen Sie dieses Wort auch der Liste hinzu.

public void setWord(String word) { 

    boolean exists = false; 
    for (int i = 0; i < words.size(); i++) { 
     if (words.get(i).equals(word)) { 
      exists = true; 
      break; 
     } 
    } 
    if (!exists) { 
     words.add(word); 
     System.out.println("words.get(i): " + words.get(i) + " word: " + word); 
    } 
} 

oder Sie könnten Arraylist enthält:

public void setWord(String word) { 

    if(!words.contains(word)) { 
     words.add(word); 
     System.out.println("words.get(i): " + words.get(i) + " word: " + word); 
    } 
} 
1

In dieser Art von Fällen sollten Sie anstelle von Arraylist Satz verwenden. Noch unterhalb der Code-Änderung sollte Ihnen helfen.

+0

danke! Das funktioniert! Wie schreibe ich es mit Set? – acroscene

+0

Setze Wörter = new HashSet(); set.add (Wort) .... es wird sich um alles kümmern – Shiva