我的问题是如何不允许重复值进入数组?例如,我有一个程序,它应该采用10到100之间的五个用户输入值,并将它们放入一个数组中。此外,它应该告诉用户当前输入的值是否与当前在阵列中找到的值重复。如果是这样,它不应该记录该值,并且在五个输入的末尾,它应该输出仅具有唯一值的数组。例如,用户输入:12,16,30,30,99,结束输出将是:12,16,30,99。如何消除重复项?
答案 0 :(得分:2)
一种简单的方法是将每个输入存储到Set
,因为如果已经存在,它将不会添加数据。
不包含重复元素的集合。更正式的,集合 不包含元素e1和e2对,使得e1.equals(e2)和at 大多数一个null元素。正如其名称所暗示的,这个界面模型 数学集抽象。
请注意,如果该集合尚未包含指定的元素,那么add
方法将返回true,这样可以更容易地记录错误消息。
if(!yourSet.add(input))
System.out.println("Already exist.");
如果您查看map
HashSet
方法的源代码
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
您会注意到所有内容都存储在HashMap
中,然后在每次添加时,如果put
调用返回null,则返回值为true,如果之前没有映射,则会返回这把钥匙。
PRESENT
对象只是一个虚拟值,可以正确使用put
方法。
// Dummy value to associate with an Object in the backing Map
private static final Object PRESENT = new Object();
如果你真的不能使用Set
,那么你可以在这里实现这个目标:
确保在布尔值设置为true时循环停止循环
for(int i = 0; !flag && i < array.length; i++)
答案 1 :(得分:1)
使用Set:
Set<Integer> aSet = new HashSet<Integer>();
aSet.add(12);
aSet.add(16);
aSet.add(30);
aSet.add(30);
aSet.add(99);
for (Integer number:aSet) {
System.err.print(number+", ");
}
System.err.println();
这将打印出12, 16, 30, 99,