我正在研究一种比较随机整数数组中的值的方法。该方法应该检查唯一性。如果没有重复的整数,则该数组将被视为唯一的,否则它不是唯一的。曲线球是我必须返回boolean
值。它编译但最终崩溃。有什么建议吗?
public static boolean isUnique(int[] list) {
boolean unique = true;
do {
for (list i = 0; i < array.length; i++) { // cycle through array
if (list[i] != list[i + 1]) // checks to see if first element is not equal to 2nd
{
unique = true;
}
}
} while (unique);
{
if (unique == true) {
System.out.println("This list contains all unique values");
}
return true; // if all values are unique return true
}
else
System.out.println("This list contains duplicates");
return false; // otherwise the array contains dublicate
}
答案 0 :(得分:1)
这里有两个问题 -
首先崩溃 - 您正在检查列表中的下一个值;但是,当你在列表的末尾(i = array.length - 1)时,下一个值将不在列表的末尾。
其次,您可能无法预先对这些值进行排序,因此您不知道对相邻值进行检查会发现所有重复值。
答案 1 :(得分:1)
相反,如果所有代码,你可以让JDK为你做繁重的工作:
Set<Integer> set = new HashSet<Integer>();
for (int i : list)
set.add(i);
return set.size() == list.length;
如果您的list
变量实际一个List
,您可以在一行中执行此操作:
public static boolean isUnique(List<Integer> list) {
return new HashSet<Integer>(list).size() == list.size();
}
如果你想“过度”,你可以将这个最后一个版本都设为通用版本,因此它适用于任何类型,并适用于任何集合:
public static boolean isUnique(Collection<?> list) {
return new HashSet<Object>(list).size() == list.size();
}
请注意,内部Object
的{{1}}类型不会使行为的正确性无效 - 该集合并不关心类型是什么,只关注Set
和{{ 1}}正确实现了类型。
答案 2 :(得分:0)
你方法中的一切都是错误的,你进入无限循环,有无用的结构
这是检查数组唯一性的可能变体之一:
public static boolean isUnique(final int[] list) {
for (int i = 0; i < (list.length - 1); i++)
for (int j = (i + 1); j < list.length; j++)
if (list[i] == list[j])
return false;
return true;
}