You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java实现整数数组成员测试 判断指定数字是否存在及排查1-10缺失数

问题原因

你代码的运行结果不符合预期,问题出在Arrays.asList(arry).contains(1)这一行:

  • Arrays.asList()方法接收的是泛型可变参数,Java里基本类型不能作为泛型参数,你传入int[]基本类型数组时,方法会把整个int数组当作单个Object类型元素处理,最终返回的是List<int[]>类型,而不是你预期的List<Integer>
  • 也就是说这个List里只存了一个元素(就是你的int数组对象),调用contains(1)的时候是拿Integer类型的1和int数组对象对比,自然永远返回false。
修复方案

你可以选以下任意一种方式实现数组成员判断,再扩展逻辑找出1-10区间缺失的数字:

方案1:手动遍历判断

最简单无额外依赖的方式,直接循环数组逐一对比元素:

public static boolean contains(int[] arr, int target) {
    for (int num : arr) {
        if (num == target) {
            return true;
        }
    }
    return false;
}

方案2:将基本类型数组转为包装类型列表

如果要使用List的contains方法,需要先把int[]转为Integer[]:

Integer[] integerArry = Arrays.stream(arry).boxed().toArray(Integer[]::new);
System.out.println(Arrays.asList(integerArry).contains(1)); // 此时返回结果正确

方案3:使用Stream API直接判断

Java 8及以上版本可以用Stream的anyMatch方法一行完成判断:

boolean isContain = Arrays.stream(arry).anyMatch(num -> num == 1);
完整功能实现代码

以下代码可以正确输出你输入的数字中,1-10区间缺失的数字:

import java.util.Scanner; 
import java.util.Arrays; 

public class Q1 { 
  public static void main(String[] args) { 
    Scanner scan = new Scanner(System.in); 
    System.out.println("请输入元素个数:"); 
    int size = scan.nextInt(); 
    int arry[]=new int[size]; 
    for(int i =0;i<size;i++){ 
      System.out.println("请输入1-10之间的任意数字:"); 
      int element = scan.nextInt(); 
      arry[i] = element; 
    } 
    System.out.println("你输入的数组为:" + Arrays.toString(arry));
    
    // 找出1-10缺失的数字
    System.out.print("1-10区间缺失的数字为:");
    for (int i = 1; i <= 10; i++) {
        int target = i;
        boolean notExist = Arrays.stream(arry).noneMatch(num -> num == target);
        if (notExist) {
            System.out.print(target + " ");
        }
    }
    scan.close();
  } 
}

内容的提问来源于stack exchange,提问作者Ngawang Tobden

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 02:48:00