方法返回true,即使它不应该返回true。 for循环可能并发症

时间:2016-06-26 18:54:42

标签: java boolean

我对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循环不起作用,但我不太清楚为什么。

提前致谢!

2 个答案:

答案 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;
}