Java 数组求和代码错误分析及修复
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);
}
}
错误分析:
-
未初始化数组
sum: 在代码中,sum数组在声明时没有初始化,因此它没有分配内存空间,导致访问sum[i]时会抛出NullPointerException错误。 -
循环条件错误: 在
else分支的第二个循环中,循环条件for(int j=b.length;j<b.length;j++)永远不会执行。正确的条件应该是for(int j=a.length;j<b.length;j++)。 -
未初始化数组
sumArray: 在main方法中,sumArray数组也没有初始化,同样会引发错误。
修复方案:
-
初始化数组
sum: 在声明sum数组时,需要指定其大小,或者使用new关键字为其分配空间。 -
修改循环条件: 将
else分支中第二个循环的条件改为for(int j=a.length;j<b.length;j++)。 -
初始化数组
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);
}
}
经过以上修正,代码即可正常运行,并能正确地计算两个数组的和。
原文地址: https://www.cveoy.top/t/topic/mL0b 著作权归作者所有。请勿转载和采集!