【问题标题】:Arrays.asList(an_array).contains(an_integer) always false.Why? [duplicate]Arrays.asList(an_array).contains(an_integer) 总是假的。为什么? [复制]
【发布时间】:2014-01-17 23:33:00
【问题描述】:

我正在尝试构建一个彩票程序,并且我想检查一个数字是否已经存在于之前的中奖号码中(在数组内)。所以我正在尝试这个

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(winningNumbers).contains(randomNums) 总是错误的。我在这里做错了什么?

感谢您的宝贵时间。

【问题讨论】:

  • Arrays.asList 不会像您期望的 int[] 那样工作。您必须使用 Integer[] 或使用替代方法。
  • 我建议使用一个集合,然后使用一段时间,因为 set.size 小于 6

标签: java arrays


【解决方案1】:

问题在于对可变参数方法Arrays.asList的解释。它将类型解释为int[],因此您会收到List&lt;int[]&gt;,而不是List&lt;Integer&gt;。所以你传入的数字都不等于int[]

您可以将winningNumbers 声明为Integers 的数组,这样该数组就会按照您的预期进行解释,并且您会收到一个List&lt;Integer&gt; 返回。您自己的findIfExist 方法也很有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-26
    • 2014-02-06
    相关资源
    最近更新 更多