2016-09-20 3 views
2

У меня проблемы со сравнением двух строк в моем цикле.Сравнение двух строк в ArrayList

Скажем, я хочу поместить два слова в ArrayList. Я решаю записать оба слова через inputDialogeBox и поместить их в список. Если два слова совпадают, второе слово не будет добавлено в список.

Но когда я сравниваю две строки, программа, похоже, не заботится о том, идентичны ли они и оба заканчиваются в списке.

Heres мой код:

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

И мой класс:

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

Я думаю, что проблема вокруг добавить один DefaultValue, только чтобы получить что-то цикл с. В противном случае, если ArrayList пуст, я не могу запустить свой цикл. Но может быть, есть лучший способ?

Благодаря

+2

Вы добавляете слово в список, если в списке есть * любые * слова, которые не являются словом. – Andreas

+0

Извините. Im an beginner :-)
1) Если ArrayList пуст - добавьте первое значение в список 2) Я пропущу это значение. 3) Если строка (по умолчанию) не совпадает с первым словом, она добавляет первое слово в ArrayList . 4) Если строка (по умолчанию и word1) не является вторым словом, она добавляет ее в ArrayList Но я думаю, что Im messing it up :-) – acroscene

+2

Если вы хотите предотвратить дубликаты, используйте Set, а не List. –

ответ

1

Вопрос заключается в том, что вы не проверяла все значения, только по одному. Для первого слова вы проверяете «default» и добавляете в список. Для второго слова сначала вы проверяете «default», и поскольку это не равно, вы также добавляете это слово в список.

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

или вы могли бы использовать ArrayList содержит:

public void setWord(String word) { 

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

В этом типе случаев вы должны использовать набор вместо ArrayList. Все еще ниже модификация кода должна вам помочь.

public void setWord(String word) {' 
     boolean found = false;  
     for (int i = 0; i < words.size(); i++) { 
      if (words.get(i).equals(word)) { 
       found=true; 
       break; 
      } 
     } 
     if(!found){ 
      words.add(word); 
     } 
    } 
+0

спасибо! Это работает! Как написать его с помощью Set? – acroscene

+0

Set words = new HashSet(); set.add (слово) .... он позаботится обо всем – Shiva

Смежные вопросы