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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 11:54:08