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
相关产品推荐
相关产品推荐

