Java循环中出现Index 5 out of bounds for length 5错误求助
问题分析与解决
1. 数组越界错误原因
你遇到的Index 5 out of bounds for length 5错误,核心原因是循环逻辑会在字符串长度为奇数时访问超出数组范围的索引。比如长度为5的字符串,数组合法索引是0-4:
- 当
index=4时,满足index<5的循环条件,执行msg1[index] = msg1[++index],此时index被自增为5,而数组最大索引仅为4,直接访问msg1[5]就触发了越界异常。
另外,原代码的逻辑完全不符合奇偶索引相邻互换的需求——它只是用后一个字符覆盖前一个,没有保存原字符,根本没完成互换操作。
2. 修正后的代码
要实现奇偶索引相邻互换,需要保证循环不越界,同时完成真正的字符交换:
import java.util.Scanner; public class A3_Q1 { public static void main(String... args) { System.out.print("Enter the message you want to be coded: "); Scanner in = new Scanner(System.in); String msg = in.nextLine(); in.close(); msg = msg.trim(); char msg1[] = msg.toCharArray(); int index = 0; // 循环处理每一对相邻索引,只到倒数第二个字符(避免越界) while (index < msg1.length - 1) { // 保存当前偶数索引的字符,防止被覆盖 char temp = msg1[index]; // 把奇数索引的字符放到偶数索引位置 msg1[index] = msg1[index + 1]; // 把原偶数索引的字符放到奇数索引位置 msg1[index + 1] = temp; // 跳过两个索引,处理下一对 index += 2; } System.out.print(msg1); } }
3. 关键修正点
- 循环条件改为
index < msg1.length - 1:确保处理到倒数第二个字符就停止,不会触发越界 - 增加临时变量
temp:保存原偶数索引的字符,完成真正的互换操作 - 每次循环
index += 2:直接跳到下一对需要互换的索引,避免重复处理
内容的提问来源于stack exchange,提问作者presidentdeeznut
相关产品推荐
相关产品推荐

