循环,即使应该返回false
我做数字的ArrayList,适当循环,即使应该返回false
private ArrayList<Integer> numbers = new ArrayList();
,我要检查,如果他们都是独一无二返回true。所以我有这样的代码:
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;
}
的想法是,我要参加的整数输入平方数(N),从1 to n
独特。
但无论我添加到数字(13 2 13 2
),它总是返回true
。
这里我的逻辑有什么问题?
如果列表中可以包含以上n号和所有你想要的是验证1 ..n的所有存在,并没有重复,那么你的代码进行修改,以这样的:
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;
}
如果在另一方面列表不能包含n个元素更多,你并不需要其他列表中的所有:
public boolean isUnique()
{
if (numbers.size()<n)
return false;
for(int i = 1; i<=numbers.size(); i++)
{
if(!numbers.contains(i))
return false;
}
return true;
}
完美!谢谢,我明白你的所作所为。这很好。 我使用了第一个片段,因为我必须允许用户输入,直到用户打破它,然后我必须计算他们已经投入了多少。 – novalsi
您正在检查列表是否包含等于索引的值,而不是列表中的数字。您需要get()
索引处的值(或使用foreach循环)。
在将一个数字添加到checkNumbers
之后,您也有一个return语句,因此在将第一个数字添加到该数字后,列表将立即超出范围。因此,在进行if评估时,它绝不会包含数字。
checkNumbers
始终为空,因此第一次找到值为i
的列表时,它会将该值添加到checkNumbers
,然后return true
。
我想反过来逻辑 - 它第一次发现一个数字在列表中,并在checkNumbers
,返回false。如果这从未发生,则返回true。
您的方法返回true的原因是您在其中创建了checkNumbers
,因此它是空的。不要紧,你把数字放在 - checkNumbers
找不到,添加它并返回true。
尝试用数字吸引你的checkNumbers
。
您创建一个新的数组;
ArrayList<Integer> checkNumbers = new ArrayList();
然后在循环中你这样做;
if (numbers.contains(i) && !checkNumbers.contains(i))
{
checkNumbers.add(i);
return true;
}
!checkNumbers.contains(i)
将总是是真实的;你刚创建它;它是空的。所以第一次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;
}
http://*.com/questions/562894/java-detect-duplicates-in-arraylist –
的可能的复制是'i'实际上要核对数量是否在列表中'numbers' ? 'I'将会是1,2,3,4 ......以数字的大小,而不是'数字'本身的值。 –
@ben_w它是。我必须输入一个方形数(n)的整数输入,从1到n是唯一的。 – novalsi