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

如何按首尾交替方式遍历数组?解决ArrayIndexOutOfBoundsException报错

嗨,我来帮你搞定这个数组遍历的问题~

首先,你的代码抛出ArrayIndexOutOfBoundsException的原因很明确:循环条件用了start != end,导致当start超过end之后,循环还会继续执行。比如你示例里的数组长度是6,当第三次循环结束后,start变成3,end变成2,这时候start != end依然成立,循环会继续打印arr[3]和arr[2],然后start变成4,end变成1……直到start超过数组的最大索引(5),或者end变成负数,这时候访问数组元素自然就越界了。

那怎么修正呢?我们需要把循环条件改成start < end,这样当start和end交叉(偶数长度)或者相遇(奇数长度)时,循环就会停止。另外,还要处理数组长度为奇数的情况——这时候循环结束后start和end会指向同一个中间元素,需要单独打印它。

给你修正后的代码:

char[] arr = {'a', 'b', 'c', 'd', 'e', 'f'};
int start = 0;
int end = arr.length - 1;

while (start < end) {
    System.out.print(arr[start] + " " + arr[end] + " ");
    start++;
    end--;
}

// 处理奇数长度的数组,打印中间剩下的元素
if (start == end) {
    System.out.print(arr[start]);
}

我们来测试不同场景:

  • 对于你的示例数组[a,b,c,d,e,f](长度6,偶数):循环执行3次,依次打印a f、b e、c d,循环结束后start=3,end=2,不满足start==end,最终输出a f b e c d,完全符合需求。
  • 如果是奇数长度的数组,比如[a,b,c,d,e]:循环执行2次,打印a e、b d,循环结束后start=2,end=2,会打印中间的c,最终输出a e b d c,也符合首尾交替的逻辑。
  • 空数组或者长度为1的数组也不会报错:空数组的话end=-1,start < end不成立,循环不执行;长度为1的数组start==end,直接打印唯一的元素。

这样修改后,就能完美避免越界问题,同时覆盖所有场景的首尾交替遍历需求啦~

内容的提问来源于stack exchange,提问作者Linda Weston

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:11:34