Java 数组求和代码错误分析及修复

以下代码展示了数组求和函数 sumArray2 的错误,以及相应的修复方案:

public class sumArray {
    public static int[] sumArray2(int[] a, int[] b) {
        int [] sum; // 错误:未初始化数组
        if(a.length>b.length) {
            for(int i=0;i<b.length;i++) {
                sum[i]=a[i]+b[i];
            }
            for(int j=b.length;j<a.length;j++) {
                sum[j]=a[j];
            }
        } else {
            for(int i=0;i<a.length;i++) {
                sum[i]=a[i]+b[i];
            }
            for(int j=a.length;j<b.length;j++) { // 错误:循环条件错误
                sum[j]=a[j];
            }
        }
        return sum;
    }
    public static void main(String[] args) {
        int [] sumArray; // 错误:未初始化数组
        int [] a= {1,2,4},b={2,4,6,8};
        sumArray=sumArray2(a,b);
    }
}

错误分析:

  1. 未初始化数组 sum: 在代码中,sum 数组在声明时没有初始化,因此它没有分配内存空间,导致访问 sum[i] 时会抛出 NullPointerException 错误。

  2. 循环条件错误: 在 else 分支的第二个循环中,循环条件 for(int j=b.length;j<b.length;j++) 永远不会执行。正确的条件应该是 for(int j=a.length;j<b.length;j++)

  3. 未初始化数组 sumArray: 在 main 方法中,sumArray 数组也没有初始化,同样会引发错误。

修复方案:

  1. 初始化数组 sum: 在声明 sum 数组时,需要指定其大小,或者使用 new 关键字为其分配空间。

  2. 修改循环条件: 将 else 分支中第二个循环的条件改为 for(int j=a.length;j<b.length;j++)

  3. 初始化数组 sumArray: 在声明 sumArray 数组时,需要使用 new 关键字为其分配空间。

修改后的代码:

public class sumArray {
    public static int[] sumArray2(int[] a, int[] b) {
        int[] sum = new int[Math.max(a.length, b.length)]; // 初始化 sum 数组
        if(a.length>b.length) {
            for(int i=0;i<b.length;i++) {
                sum[i]=a[i]+b[i];
            }
            for(int j=b.length;j<a.length;j++) {
                sum[j]=a[j];
            }
        } else {
            for(int i=0;i<a.length;i++) {
                sum[i]=a[i]+b[i];
            }
            for(int j=a.length;j<b.length;j++) { // 修改循环条件
                sum[j]=b[j]; // 修改赋值语句
            }
        }
        return sum;
    }
    public static void main(String[] args) {
        int[] sumArray = new int[Math.max(a.length, b.length)]; // 初始化 sumArray 数组
        int[] a= {1,2,4},b={2,4,6,8};
        sumArray=sumArray2(a,b);
    }
}

经过以上修正,代码即可正常运行,并能正确地计算两个数组的和。

Java 数组求和代码错误分析及修复

原文地址: https://www.cveoy.top/t/topic/mL0b 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录