java - Java:如何防止使用条件语句将重复项添加到 ArrayList?
问题描述
我几乎完成了一个收集用户输入(关键字)并显示它们的程序。我让它在这方面发挥作用,但我还需要使用条件 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();
}
}
解决方案
我就是这样做的,我展示了我的整个程序,因为我将您的一些自定义类更改为字符串,并且并不真正知道这些自定义类做了什么。
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;
}
推荐阅读
- typescript - 打字稿以递归方式更改属性类型
- firebase - Flutter Web(Beta),Dart,无法完成异步 Future 函数 - 使用 JSON Firestore 包装器插件 - asyc、await、Future
- python - 在 Django Rest Framework JSONAPI 中批量插入
- reactjs - 反应钩子/本地存储
- javascript - 不理解特定情况下的逻辑运算符
- isapi - ISAPI 将一个 URL 重定向到另一个 URL
- php - Woocommerce:如何显示可变产品选项下拉列表的 SKU
- java - 如何查找哪个模块定义了注解
- mysql - 从当前和以前的记录中选择数据
- vba - Outlook VBA:尝试通过约会集合向后循环以删除它们时,Items.Count 溢出