Java数组反转程序运行异常求助:自定义函数实现报错排查
问题分析与修复方案
你的代码运行报错的核心原因是数组索引越界,还有逻辑冗余问题,下面逐一说明并修复:
1. 数组索引越界错误
在reversea方法中,你初始化j = array.length,但Java数组的合法索引范围是0到array.length - 1,第一次循环访问array[j]时直接超出范围,触发ArrayIndexOutOfBoundsException。
修正方式:将j的初始值改为array.length - 1,对应数组最后一个元素的索引。
2. 无意义的返回值
reversea方法返回j完全没必要——数组是引用类型,方法内部修改后原数组已经同步变更,不需要返回任何值,建议把方法返回类型改为void。
3. 冗余的打印输出
你调用reversea(arr)后打印了返回值,这一步没有实际意义,直接去掉即可。
修复后的完整代码
import java.util.*; public class reverseanarray{ public static void reversea(int array[]){ int swap; int j = array.length - 1; // 修正初始索引 for(int i = 0; i < array.length / 2; i++){ swap = array[i]; array[i] = array[j]; array[j] = swap; j--; } } public static void main(String args[]){ Scanner sc = new Scanner(System.in); System.out.println("please input the length"); int y = sc.nextInt(); int arr[] = new int[y]; // 输入数组元素 for(int r = 0; r < arr.length; r++){ System.out.println("please input the " + r + " index value"); arr[r] = sc.nextInt(); } reversea(arr); // 调用反转方法,无需打印返回值 // 输出反转后的数组 for(int i = 0; i < y; i++){ System.out.println(arr[i]); } } }
额外优化建议
- 可以在反转前后分别打印数组,方便直观对比效果
- 遵循Java命名规范,建议将类名改为
ReverseAnArray(大驼峰格式)
内容的提问来源于stack exchange,提问作者Bilal Sahi
相关产品推荐
相关产品推荐

