Arrays.asList(an_array).contains(an_integer)总是假的。为什么?

时间:2014-01-17 23:33:00

标签: java arrays

我正在尝试建立一个彩票计划,我想检查以前的中奖号码(数组内)是否已经存在一个号码。所以我正在尝试这个

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)总是为假。我在这里做错了什么?

感谢您的时间。

1 个答案:

答案 0 :(得分:3)

问题在于对varargs方法Arrays.asList的解释。它会将类型解释为int[],以便您收到List<int[]>,而不是List<Integer>。因此,您传入的数字都不等于int[]

您可以将winningNumbers声明为Integer的数组,以便数组按您的预期进行解释,然后返回List<Integer>。您自己的findIfExist方法效果也很好。