Java使用do while循环遍历List触发IndexOutOfBoundsException如何解决
问题根源
你遇到的报错是因为do-while循环的执行特性:先执行循环体,再校验循环条件。你的代码没有提前处理空集合场景,当传入的numbers是长度为0的空List时,程序会直接执行numbers.get(0)尝试读取索引为0的元素,此时就会触发索引越界异常。
修复方案
方案1:增加前置非空判断(推荐)
进入循环前先判断集合是否为空,空集合直接返回false即可,也可以额外增加参数非空校验避免空指针异常,修改后代码如下:
public static boolean hasGreaterDoWhile(List<Integer> numbers, int number) { if (numbers == null || numbers.isEmpty()) { return false; } int d = 0; do { if (numbers.get(d) > number){ return true; } d++; } while (d < numbers.size()); return false; }
其他可选实现
如果没有必须使用do-while的硬性要求,使用普通for循环、增强for循环或者Stream API实现会更简洁,也能天然适配空集合的场景,比如Stream实现示例:
public static boolean hasGreater(List<Integer> numbers, int number) { return numbers != null && numbers.stream().anyMatch(n -> n > number); }
内容的提问来源于stack exchange,提问作者Rey Cai
相关产品推荐
相关产品推荐

