Java实现数组交换功能报IndexOutOfBound异常问题咨询
问题排查与修复
异常根因与错误点
- 下标越界问题:
getSwap方法中循环条件为i < arr.length,当i等于数组最大下标arr.length -1时,i+1等于arr.length,超出数组合法下标范围(数组下标从0开始,最大为length-1),直接触发IndexOutOfBound异常。 - 变量作用域错误:
swaped数组是getSwap方法内的局部变量,main方法无法直接访问;且getSwap当前返回值为单个int类型,无法返回完整的交换后数组。 - 逻辑不符合需求:当前相邻交换的循环运行完成后,实际效果是将数组第一个元素移动到末尾,若你需要的是数组整体反转,需要调整交换逻辑。
修复后完整代码
import java.util.*; class ArraySwap { public static void main(String[] args) throws Exception { Scanner scn = new Scanner(System.in); // 输入数组长度 System.out.println("Enter number of Elements of Array : "); int n = scn.nextInt(); // 输入数组元素 System.out.println("Enter Elements of Array : "); int arr[] = new int[n]; for (int i = 0; i < n; i++) { arr[i] = scn.nextInt(); } // 打印交换前数组 System.out.println("交换前数组元素:"); for (int i = 0; i < arr.length; i++) { System.out.println("The Elements in Array are : " + arr[i]); } System.out.println("After Swapping:"); // 接收交换后的数组 int[] swaped = getSwap(arr); // 打印交换后数组 for (int i = 0; i < swaped.length; i++) { System.out.println("The Elements in Array are : " + swaped[i]); } scn.close(); } // 交换方法:实现数组整体反转,返回交换后的新数组 public static int[] getSwap(int arr[]) { int[] swaped = Arrays.copyOf(arr, arr.length); int temp; // 只需要循环到数组中间位置即可完成反转 for (int i = 0; i < swaped.length / 2; i++) { temp = swaped[i]; swaped[i] = swaped[swaped.length - 1 - i]; swaped[swaped.length - 1 - i] = temp; } return swaped; } }
改动说明
- 调整了
getSwap方法的返回值类型为int[],直接返回完整的交换后数组 - 将循环条件调整为
i < swaped.length / 2,从数组首尾向中间两两交换,实现数组整体反转的效果,同时完全规避下标越界问题 - main方法中新增变量接收
getSwap的返回结果,解决局部变量无法跨方法访问的问题 - 新增Scanner资源关闭逻辑,避免资源泄露
如果你原本的需求是相邻元素两两交换(最终效果为数组首元素移到末尾),只需要将
getSwap中的循环条件替换为i < swaped.length -1即可,其他逻辑保持不变。
内容的提问来源于stack exchange,提问作者Himanshu Singh
相关产品推荐
相关产品推荐

