Java 比较ArrayList中的两个字符串

Java 比较ArrayList中的两个字符串,java,arraylist,Java,Arraylist,我在比较循环中的两个字符串时遇到问题 假设我想在ArrayList中输入两个单词。我决定通过inputDialogeBox写下这两个单词,并将它们放在列表中。如果两个单词相同,则第二个单词不会添加到列表中 但是,当我比较这两个字符串时,程序似乎并不关心它们是否相同,它们最终都在列表中 这是我的密码: package testing; import javax.swing.*; public class Testing { public static void main(String

我在比较循环中的两个字符串时遇到问题

假设我想在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;
    }
}
封装测试;
导入java.util.ArrayList;
公共类词{
ArrayList words=新的ArrayList();
公共无效设置字(字符串字){
//在arraylist中设置第一个值以启动循环
if(words.isEmpty()){
文字。添加(“默认”);
}
for(int i=0;i
我猜问题在于我添加一个defaultvalue,只是为了得到一些循环使用的东西。否则,如果ArrayList为空,则无法启动循环。但也许有更好的办法


谢谢

问题在于您没有检查所有的值,只是逐个检查。对于第一个单词,您选中“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);
    }
}

在这种情况下,应该使用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);
        }
    }
public void设置字(字符串字){'
布尔值=false;
for(int i=0;i
如果列表中有任何单词不是该单词,则您正在将该单词添加到列表中。抱歉。我是初学者:-)
1)如果ArrayList为空,则向列表中添加第一个值2)我循环使用唯一的值。3) 如果字符串(默认值)与第一个单词不一样,它会将第一个单词添加到ArrayList 4)如果字符串(默认值和单词1)与第二个单词不一样,它会将其添加到ArrayList,但我想我弄糟了:-)如果要防止重复,请使用集合,而不是列表。(如何通过正确的格式编辑我的帖子?)
对不起。我是一个初学者:-)1)如果ArrayList为空-在列表中添加第一个值2)我循环遍历唯一的值。3) 如果字符串(默认值)与第一个单词不一样,它会将第一个单词添加到ArrayList 4)如果字符串(默认值和单词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);
        }
    }