【发布时间】:2020-08-19 13:42:48
【问题描述】:
我正在尝试做一个摆动应用程序,它将名称添加到 ArrayList,然后将其显示在 Jcombobox 中。我已经完成了窗口和所有操作,但我似乎无法摆脱检测重复名称的问题。
我试过了
btnnext.addActionListener(new ActionListener() {
Override
public void actionPerformed(ActionEvent e) {
if(checkDuplicate(names)==true)
{
names.add(txtname.getText());
txtname.setText("");
}
else {
JOptionPane.showMessageDialog(null,"DUPLICATE! do not add");
}
}
});
public static boolean checkDuplicate(ArrayList<String> list) {
HashSet set = new HashSet();
for (int i = 0; i < list.size(); i++) {
boolean val = set.add(list.get(i));
if (val == false) {
return val;
}
}
return true;
}
它只是说当我已经将它添加到 ArrayList 并且当我收到消息时我无法添加任何其他内容时我有重复。
输入示例:
测试
测试
然后它停止接受新的字符串,只显示消息 DUPLICATE!不要添加
【问题讨论】:
-
发生这种情况是因为您每次调用
checkDuplicate时基本上都是在创建ArrayList的Set视图,而不是将您尝试添加的项目与现有列表进行比较。换句话说,您的checkDuplicate是这样编写的,它仅在列表中已经存在重复项时才返回true。您需要将新项目与列表进行比较。使用调试器或手动记下变量的值仔细检查您的逻辑,您会发现问题。 -
正如你所说的 checkDuplicate 方法让我无处可去。我使用了 contains 方法,并且工作起来非常有魅力。