我对Java很陌生,所以请原谅我。我写了这个程序:
public static void main(String args[])
{
int[] list = {1, 1, 2, 2, 3, 4, 5, 6, 7, 8, 10};
isUnique(list);
System.out.println(isUnique(list));
}
private static boolean isUnique(int[] array)
{
int count = 0;
for (int n : array)
{
for (int i = 0; i < array.length; i++)
{
if (n == array[i])
{
count++;
}
if (count > 1)
{
return false;
}
else
{
return true;
}
}
}
return false;
}
}
它应该检查数组,看看每个数字是否超过1个。然而,它似乎不起作用。即使有两个1,它也会返回true。什么好主意吗?我怀疑for循环不工作,但我不太确定为什么。
提前感谢!
无论如何它都会返回true
,因为您有else
块。因为count
从0开始,并且每个循环最多增加一次,所以else
块将始终运行(如果数组长度不为0)。
1。n == array[i]
——> count将等于1——> count>1
is not true——> else块运行并返回true。
2。n不是array[i]
——> count = 0——> count >1
是不是 true——> else块运行并返回true
您的代码在检查第一个元素后返回true,因为在检查第一个元素count == 1
之后,因此执行else语句:
if (count > 1)
{
return false;
}
else
{
return true;
}
您应该只在检查数组中的所有元素并且没有发现重复元素后返回true
。
如果输入数组已排序,则不需要嵌套循环来确定是否有两个连续相等的数字。一个循环就可以了。
如果数组没有排序,则必须为数组中找到的每个值的出现次数维护计数,为此可以使用HashMap
。
假设输入数组已排序:
private static boolean isUnique(int[] array)
{
if (array.length <= 1)
return true;
int previous = array[0];
for (int i = 1; i < array.length; i++)
{
if (previous == array[i])
{
return false;
}
previous = array[i];
}
return true;
}