方法返回true,即使它不应该返回true.可能与for循环复杂



我对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;
}

最新更新