我对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循环不起作用,但我不太清楚为什么。
提前致谢!
答案 0 :(得分:2)
无论如何都会返回true
因为你有else
块。由于count
启动为零并且每个循环最多增加一次,因此else
块将始终运行(如果数组长度不为0)。您可以将此视为两种情况:
案例1 n == array[i]
- &gt; count将等于1 - > count>1
不为真 - &gt; else块运行并返回true。
案例2. n不是array[i]
- &gt; count等于0 - &gt;计数>1
不为真 - &gt; else块运行并返回true
答案 1 :(得分:1)
检查第一个元素后,您的代码返回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;
}