Java中ArrayList方法无法打印最后一个奇数元素,求排查方案
问题分析与修复方案
咱们先拆解你代码里的几个核心问题,这些问题直接导致你没法正确打印最后一个奇数:
1. main方法的执行逻辑错误
你现在是每添加一个元素就调用一次removeEvens,这完全没必要,还会让集合被反复修改,打乱后续的处理逻辑。正确的做法应该是先把1到100所有元素都添加到ArrayList中,再一次性调用removeEvens方法处理。
2. removeEvens方法的打印与判断逻辑混乱
- 你当前的打印时机完全错了:在删除偶数后调用
System.out.println(array.get(i)),但刚执行过i--,此时拿到的是被删除元素的前一个元素,逻辑完全颠倒。 - 你用来捕捉最后一个元素的判断
if(i==array.size())永远不会触发——因为循环条件是i < array.size(),i的最大值只能是array.size()-1,根本不可能等于集合的长度。
修复后的完整代码
import java.util.ArrayList; public class Odds { public static void main(String[] args) { ArrayList<Integer> odds = new ArrayList<Integer>(); // 先一次性把1-100全部添加进集合 for(int index = 1; index < 101; index++) { odds.add(index); } // 统一调用方法处理偶数删除与打印 removeEvens(odds); } public static void removeEvens(ArrayList<Integer> array) { // 先完成所有偶数的删除操作 for(int i = 0; i < array.size(); i++) { if (array.get(i) % 2 == 0) { array.remove(i); i--; // 删除元素后索引回退,避免跳过下一个元素 } } // 删除完成后,打印所有奇数(包含最后一个) System.out.println("所有奇数元素:"); for(int num : array) { System.out.println(num); } // 如果需要单独打印最后一个奇数 if(!array.isEmpty()) { System.out.println("\n最后一个奇数元素:" + array.get(array.size() - 1)); } } }
关键修复点说明
- 调整main方法的执行顺序:先填充完整集合,再执行处理逻辑,避免重复修改集合导致的异常。
- 分离删除与打印逻辑:先完成所有偶数的删除,再统一遍历打印奇数,彻底解决最后一个元素遗漏的问题。
- 安全获取最后一个元素:通过
array.size() - 1获取索引,同时先判断集合是否为空,避免出现索引越界异常。
这样修改后,不仅能正确打印所有奇数,最后一个奇数也能正常输出啦~
内容的提问来源于stack exchange,提问作者Ethan Owen
相关产品推荐
相关产品推荐

