如何检查我的Input
String
是否在我的ArrayList
中?
我是这样做的。但它始终显示"not equal"
。我以1
为例:
public class Main {
public static void main(String[] args) {
String Input = JOptionPane.showInputDialog("Input:");
ArrayList<String> list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
if (Input.equals(list)) {
JOptionPane.showMessageDialog(null, "equals");
} else {
JOptionPane.showMessageDialog(null, "not equal");
}
}
}
答案 0 :(得分:0)
如果要检查List<T>
是否包含T item
,则应在代码中使用yourList.contains(T item)
,这是完全不同的item.equals(object)
。简而言之,equals()
所做的是检查两个对象是否都存储在相同的内存地址中。尽管对于某些默认类,此方法被覆盖并且以不同的方式起作用,但是String
类是一个很好的例子。
答案 1 :(得分:0)
您写了
if (Input.equals(list)) { ... }
,其中Input
是String
,而list
是ArrayList
。但是,String#equals
(documentation)方法比较两个String
是否具有相同字符(例如"hello".equals("hello")
),而不是比较参数列表是否包含您称为方法的元素上。引用其文档:
将此字符串与指定对象进行比较。当且仅当参数为而不是
true
且结果为null
对象,表示相同的字符序列String >作为此对象。
您实际要使用的是List#contains
(documentation):
如果此列表包含指定的元素,则返回
true
。更正式地说,当且仅当此列表包含至少一个元素true
使得e
时,返回Objects.equals(o, e)
。
所以代码可能像这样:
if (list.contains(Input)) { ... }
请注意命名约定。变量名称应始终位于 camelCase 中,因此用input
代替Input
。方法名称相同。
仅在 PascalCase 中编写类名。常量(static final
)用大写 SNAKE_CASE 编写。