【发布时间】:2019-09-01 12:42:49
【问题描述】:
我几乎完成了一个收集用户输入(关键字)并显示它们的程序。我让它在这方面发挥作用,但我还需要使用条件 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();
}
}
【问题讨论】:
-
为什么不使用
contains方法? -
if (!keywords.contains(keyword)) keywords.add(keyword); -
感谢@shmosel 的回复。编译并运行,但在我运行程序后它什么也不显示。只是标题:“**********您的唯一用户关键字**********”
-
可能是您的
display()方法中的一个错误。如果你想让contains()工作,你还需要实现equals()和hashCode()。 -
你必须为哈希集合实现
equals(). You only needhashCode()`。 @shmosel
标签: java for-loop if-statement arraylist boolean