Java:如何防止使用条件语句将重复项添加到ArrayList中?

时间:2019-04-11 00:23:41

标签: java for-loop if-statement arraylist boolean

我几乎完成了一个程序,该程序可以收集用户的输入(关键字)并显示它们。我可以在这方面发挥作用,但是我还需要防止使用条件if语句将重复的关键字添加到列表中。我知道我走在正确的道路上,但是无法将语法和使用布尔值将输入的关键字与现有的ArrayList进行比较时陷入困境。

我知道有诸如Hash / Set之类的方法,但是我希望能够在使用其他技术之前使用条件语句来做到这一点。我在搜索中找到的每个答案似乎都可以解释Hash的使用。

谢谢!

更新:我已经根据@Jacob的答案将代码编辑为当前的代码,这正是我想要的,因此感谢您的答复。但是它仍然没有删除重复项,就像没有检查数组并直接跳到alreadyExists == false条件语句一样。还是我无法正确比较这些值?

import java.util.*;

public class KeywordData {
    private ArrayList<Keyword> keywords = new ArrayList<Keyword>();

    public void create() {
        InputHelper inputHelper = new InputHelper();
        String prompt = "";
        boolean isTrue = true;

        while (isTrue) {
            prompt = inputHelper.getUserInput("Enter a string, otherwise type 'n' to exit:");
            if (!prompt.equals("n")) {
                Keyword keyword = new Keyword();
                keyword.setUserKeyword(prompt);

                boolean alreadyExists = false;
                for (Keyword keyword1 : keywords) {
                    if (keyword1.equals(keyword)) {
                        alreadyExists = true;
                    }
                }

                if (alreadyExists == false) {
                    keywords.add(keyword);
                } else {
                    System.out.println("You already added that word");
                }

            } else {
                break;
            }
        }
    }

    public void displayKeywords() {
        System.out.println();
        System.out.println("********** Your unique user keywords **********");
        for (Keyword keyword : keywords) {
            keyword.display();
        }
        System.out.println();
    }

}

1 个答案:

答案 0 :(得分:0)

这就是我的操作方式,我展示了整个程序,因为我将某些自定义类更改为仅字符串,而实际上并不知道这些自定义类做了什么。

import java.util.*;
import java.io.Console;

public class KeywordData {
    private ArrayList<String> keywords = new ArrayList<String>();
    Scanner reader = new Scanner(System.in);

    public void create() {
        String prompt = "";
        boolean isTrue = true;

        while (isTrue) {
            System.out.println("Enter a string, otherwise type 'n' to exit:");
            prompt = reader.next();
            if (!prompt.equals("n")) {

                boolean alreadyExists = false;
                for (String keyword1 : keywords) {
                    if (keyword1.equals(prompt)) {
                        alreadyExists = true;
                    }
                }
                if (alreadyExists == false) {
                    keywords.add(prompt);
                }else {
                    System.out.println("You already added that word");
                }

            } else {
                break;
            }
        }
    }

    public void displayKeywords() {
        System.out.println();
        System.out.println("********** Your unique user keywords **********");
        for (String keyword : keywords) {
            System.out.println(keyword);
        }
    }

    public static void main(String[] args) {
        KeywordData kd = new KeywordData();
        kd.create();
        kd.displayKeywords();
    }

}

但是更简单的检查方法是这样

if (!prompt.equals("n")) {
    if (keywords.contains(prompt)) {
        System.out.println("You already added that word");
    }else {
        keywords.add(prompt);
    }               
} else {
    break;
}