【问题标题】:Arrays.asList(arrayname).contains(int) doesnt work [duplicate]Arrays.asList(array name).contains(int) 不起作用[重复]
【发布时间】:2015-10-29 12:53:47
【问题描述】:
int[] AllCards = {1,2,3,4,5,6,7,8,9,10};

if(Arrays.asList(AllCards).contains(1))
    System.out.println("yes");
else {
    System.out.println("no");
}

我有这段代码,它只是一直打印no 而不是yes。怎么了?

【问题讨论】:

  • Arrays.asList(AllCards) 返回一个List<int[]>,因此它在List 中找不到单个值。背后的原因可以阅读here

标签: java


【解决方案1】:
Integer[] AllCards = {1,2,3,4,5,6,7,8,9,10};

if(Arrays.asList(AllCards).contains(1))
    System.out.println("yes");
else {
    System.out.println("no");
}

要了解为什么要检查这个:https://stackoverflow.com/a/1467940/4088809

【讨论】:

  • 谢谢!如何查看一个数组是否包含该数字两次?
  • if(Collections.frequency(Arrays.asList(AllCards), 1) == 2) ==> 这将检查数字 1 是否存在两次(当然您需要将 1 替换为您正在寻找的号码。)
【解决方案2】:

由于AllCards 是一个int 数组,因此调用Arrays.asList(AllCards) 返回一个具有单个元素的List,即AllCards

如果您不想将 AllCards 更改为 Integer 数组,您可以编写以下代码来测试它是否包含 1:

boolean containsOne = Arrays.stream(AllCards).anyMatch(n -> n == 1);

【讨论】:

    【解决方案3】:

    问题是1 被自动装箱为Integer 而不是int

    将声明更改为Integer[]

    【讨论】:

      【解决方案4】:

      int 更改为Integer

      Integer[] AllCards = {1,2,3,4,5,6,7,8,9,10};
      
      if(Arrays.asList(AllCards).contains(1))
          System.out.println("yes");
      else {
          System.out.println("no");
      }
      

      在 Java 中,“int”类型是原始类型,而“Integer”类型是对象。

      这意味着,如果要将 array 转换为 List 类型,则需要对象,因为您无法将原始类型保存到 List 中。

      【讨论】:

        猜你喜欢
        • 2015-10-03
        • 2016-10-25
        • 1970-01-01
        • 2020-04-04
        • 1970-01-01
        • 2012-06-14
        • 1970-01-01
        • 1970-01-01
        • 2015-06-09
        相关资源
        最近更新 更多