Java 即使循环应该返回false,也会返回true

Java 即使循环应该返回false,也会返回true,java,for-loop,boolean,return,Java,For Loop,Boolean,Return,我正在制作一个数字的数组列表 private ArrayList<Integer> numbers = new ArrayList(); private ArrayList number=new ArrayList(); 我必须检查它们是否都是独一无二的。所以我有这个代码: public boolean isUnique() { ArrayList<Integer> checkNumbers = new ArrayList(); for(int i

我正在制作一个数字的数组列表

private ArrayList<Integer> numbers = new ArrayList();
private ArrayList number=new ArrayList();
我必须检查它们是否都是独一无二的。所以我有这个代码:

public boolean isUnique()
{
    ArrayList<Integer> checkNumbers = new ArrayList();

    for(int i = 1; i<=numbers.size(); i++)
    {
        if(numbers.contains(i) && !checkNumbers.contains(i))
        {
            checkNumbers.add(i);
            return true;
        }           
    }

    return false;
}
public boolean isUnique()
{
ArrayList checkNumbers=新的ArrayList();

对于(int i=1;i您正在检查列表中是否包含与索引相等的值,而不是列表中的数字。您需要
get()
索引处的值(或使用foreach循环)


在将数字添加到
checkNumbers
之后,您还有一个return语句,因此在您将第一个数字添加到列表后,列表将立即超出范围。因此,在执行if求值时,它将永远不会包含数字。

您正在检查列表中是否包含与索引相等的值,而不是列表中的数字。您需要
get()
索引处的值(或使用foreach循环)


在将数字添加到
checkNumbers
之后,您还有一个return语句,因此在您将第一个数字添加到列表后,该列表将立即超出范围。因此,在执行if求值时,它将永远不会包含数字。

checkNumbers
一开始总是空的,因此它第一次找到值时对于列表中的
i
,它将把该数字添加到
检查数字中,然后
返回true


我将反转逻辑-当它第一次在列表和
checkNumbers
中找到一个数字时,返回false。如果从未发生过这种情况,则返回true。

checkNumbers
一开始总是空的,所以它第一次在列表中找到
I
的值时,它将把该数字添加到
checkNumbersrs
然后
返回true


我将反转逻辑-当它第一次在列表和
checkNumbers
中找到一个数字时,返回false。如果从未发生过这种情况,则返回true。

你需要迭代
数字的内容,而不是它们的索引。

你需要迭代
数字的内容,而不是它们的索引。

你需要迭代y的原因是什么我们返回true的方法是,您在其中创建您的
checkNumbers
,因此它是空的。无论您在数字中输入了什么,都不会在
checkNumbers
中找到它,添加它并返回true


尝试用数字表示您的
支票号码。

方法返回true的原因是您在支票号码中创建了
支票号码,因此它是空的。无论您在数字中输入什么,都不会在
支票号码中找到它,添加它并返回true


尝试用数字来表示您的
支票号码。

您创建了一个新数组

ArrayList<Integer> checkNumbers = new ArrayList();

!checkNumbers.contains(i)
将始终为true;您刚刚创建它;它为空。因此第一次
numbers.contains(i)
true
方法将返回
true
您创建了一个新数组

ArrayList<Integer> checkNumbers = new ArrayList();

!checkNumbers.contains(i)
将始终为true;您刚刚创建了它;它为空。因此第一次
numbers.contains(i)
true
该方法将返回
true
问题是您比较了索引,而不是索引处的值:).

问题是比较索引,而不是索引处的值:)。

方法中的问题是检查
i
的每个值是否都在
ArrayList
中。您需要做的是使用
get()
,因此必须执行以下操作:

public boolean isUnique()
{
    ArrayList<Integer> checkNumbers = new ArrayList();

    for(int i = 1; i<=numbers.size(); i++)
    {
        if(numbers.contains(checkNumbers.get(i)) && !checkNumbers.contains(numbers.get(i)))
        {
            checkNumbers.add(i);
            return true;
        }           
    }

    return false;
}
public boolean isUnique()
{
ArrayList checkNumbers=新的ArrayList();

对于(int i=1;i方法中的问题是检查
i
的每个值是否在
ArrayList
中。您需要做的是使用
get()
,因此必须执行以下操作:

public boolean isUnique()
{
    ArrayList<Integer> checkNumbers = new ArrayList();

    for(int i = 1; i<=numbers.size(); i++)
    {
        if(numbers.contains(checkNumbers.get(i)) && !checkNumbers.contains(numbers.get(i)))
        {
            checkNumbers.add(i);
            return true;
        }           
    }

    return false;
}
public boolean isUnique()
{
ArrayList checkNumbers=新的ArrayList();

对于(int i=1;i如果列表可以包含多于n的数字,并且您只需要验证1..n all是否存在且没有重复,那么您的代码应该修改为:

public boolean isUnique()
{
    ArrayList<Integer> checkNumbers = new ArrayList();

    for(int i = 1; i<=numbers.size(); i++)
    {
        if(numbers.contains(i))
        {
           if (!checkNumbers.contains(i)) 
             checkNumbers.add(i);
           else 
            return false; 
        }
        else{
            return false;
        }           
    }

    return true;
}
public boolean isUnique()
{
ArrayList checkNumbers=新的ArrayList();

对于(int i=1;i如果列表可以包含多于n的数字,并且您只需要验证1..n all是否存在且没有重复,那么您的代码应该修改为:

public boolean isUnique()
{
    ArrayList<Integer> checkNumbers = new ArrayList();

    for(int i = 1; i<=numbers.size(); i++)
    {
        if(numbers.contains(i))
        {
           if (!checkNumbers.contains(i)) 
             checkNumbers.add(i);
           else 
            return false; 
        }
        else{
            return false;
        }           
    }

    return true;
}
public boolean isUnique()
{
ArrayList checkNumbers=新的ArrayList();

对于(int i=1;i可能的重复项是
i
实际上您要检查的数字在列表
numbers
中?
i
将是1,2,3,4…与数字的大小有关,而不是
numbers
本身中的值。@ben_是。我必须接受一个平方数(n)整数输入中,从1到n是唯一的。@novalsi请用这些额外的详细信息编辑您的问题,以便人们可以在以下情况下更改他们的回答:needed@BeauGrantham刚刚做了。在底部。谢谢。可能重复的是
i
实际上您要检查的号码在列表中
number
i
将是1,2,3,4…是数字的大小,而不是
numbers
本身的值。@ben_,是的。我必须接受一个平方数(n)整数输入中,从1到n是唯一的。@novalsi请用这些额外的详细信息编辑您的问题,以便人们可以在以下情况下更改他们的回答:needed@BeauGrantham刚刚做了。在底部。谢谢。抱歉,编辑以反映我确实需要他们的索引。抱歉,编辑以反映我确实需要他们的索引。太好了!谢谢,我知道了你做得很好。这很好。我使用了第一个代码段,因为我必须允许用户输入,直到用户打破它,然后我必须计算他们输入了多少。太好了!谢谢,我知道你做了什么。这很好。我使用了第一个代码段,因为我必须允许用户输入