Java: Как предотвратить добавление дубликатов в ArrayList с помощью условного оператора? - PullRequest
1 голос
/ 11 апреля 2019

Я почти закончил с программой, которая собирает входные данные пользователя (ключевые слова) и отображает их. В этом отношении он работает, но мне также нужно предотвратить добавление дублирующихся ключевых слов в список с помощью условного оператора if. Я знаю, что я на правильном пути, но у меня возникли проблемы с обдумыванием синтаксиса и использованием логического значения для сравнения введенного ключевого слова с существующим ArrayList.

Я знаю, что есть такие методы, как Hash / Set, но я бы хотел сделать это с условным оператором, прежде чем перейти к другим методам. Кажется, что каждый ответ, который я нашел в поиске, объясняет использование хэша.

Спасибо!

ОБНОВЛЕНИЕ: Я отредактировал мой код в соответствии с тем, что у меня есть в настоящее время, основываясь на ответе @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 голосов
/ 11 апреля 2019

Вот как я это сделал, я показал всю свою программу, потому что я изменил некоторые из ваших пользовательских классов просто на строки, и на самом деле не знал, что сделали эти пользовательские классы.

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