我在循环中比较两个字符串时遇到了问题。
说我想在ArrayList中放两个单词。我决定通过inputDialogeBox写两个单词并将它们放在列表中。如果两个单词相同,则第二个单词将不会添加到列表中。
但是当我比较两个字符串时,程序似乎并不关心它们是否相同而且两者都在列表中结束。
继承我的代码:
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;
}
}
我的猜测是问题在于我添加一个默认值,只是为了让一些东西循环。否则,如果ArrayList为空,我无法启动循环。但也许有更好的方法?
由于
答案 0 :(得分:1)
问题是您没有检查所有值,只是逐个检查。首先,您可以查看&#39;默认&#39;并添加到列表中。对于第二个字,请检查&#39;默认&#39;首先,由于这不相等,你也可以将这个词添加到列表中。
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 contains:
public void setWord(String word) {
if(!words.contains(word)) {
words.add(word);
System.out.println("words.get(i): " + words.get(i) + " word: " + word);
}
}
答案 1 :(得分:1)
在这些类型的情况下,您应该使用Set而不是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);
}
}