我正在尝试建立一个彩票计划,我想检查以前的中奖号码(数组内)是否已经存在一个号码。所以我正在尝试这个
int[] winningNumbers = new int[6]; //array holding 6 random numbers
for(i = 0; i < winningNumbers.length; i++ ){
int randomNums = new Random().nextInt(49) + 1;
while (Arrays.asList(winningNumbers).contains(randomNums)){
System.out.println(Arrays.asList(winningNumbers).contains(randomNums));//always false
randomNums = new Random().nextInt(49) + 1;
}
winningNumbers[i] = randomNums ;
System.out.println(winningNumbers[i]);
}
Arrays.asList(winningNumbers).contains(randomNums)总是假,无论数字是否存在,所以while循环从未被执行过,所以我通过编写方法来解决它
public static boolean findIfExist(int a[], int x){
for (int i=0; i<a.length; i++){
if (a[i]==x){
return true;
}
}
return false;
}
我的问题是为什么Arrays.asList(winnerNumbers).contains(randomNums)总是为假。我在这里做错了什么?
感谢您的时间。
答案 0 :(得分:3)
问题在于对varargs方法Arrays.asList
的解释。它会将类型解释为int[]
,以便您收到List<int[]>
,而不是List<Integer>
。因此,您传入的数字都不等于int[]
。
您可以将winningNumbers
声明为Integer
的数组,以便数组按您的预期进行解释,然后返回List<Integer>
。您自己的findIfExist
方法效果也很好。