我试图做到这一点,所以每个数组的元素都加在一起得到一个总和,无论一个数组是否大于另一个数组。这是我得到的错误
线程中的异常" main" java.lang.ArrayIndexOutOfBoundsException:5
错误链接到第13行或第23行,具体取决于我的测试类中哪个数组更大。
(pickedList[i] = listA[i] + listB[i];
是错误行)
编辑:如果数组具有相同数量的元素,则代码可以正常工作,但当一个数组更大时会崩溃。
public static int[] AddArray(int[] listA, int[] listB)
{
int aLen = listA.length;
int bLen = listB.length;
int[] pickedList = null;
//if array 1 is longer, make picklist have same number of elements then add
//both array elements together
if (aLen >= bLen)
{ pickedList = new int[aLen];
for( int i = 0; i < aLen; i ++)
{
pickedList[i] = listA[i] + listB[i];
}
}
//if array 2 is longer, make picklist have same number of elements then add
//both array elements together
else
{
pickedList = new int[bLen];
for( int i = 0; i < bLen; i ++)
{
pickedList[i] = listA[i] + listB[i] ;
}
}
return pickedList;
}
}
答案 0 :(得分:1)
您的错误非常简单:
if (aLen >= bLen)
{ pickedList = new int[aLen];
for( int i = 0; i < aLen; i ++)
{
pickedList[i] = listA[i] + listB[i];
你有。
如果alen比blen长,那么如果你的forloop达到a的长度,你会得到一个错误,因为你有listB [i] - 你试图访问B的元素只是不在那里。
让我更清楚一点。让我们说数组a的长度为5,数组b的长度为3.a大于b,所以你从0到5循环i。对于i = 0,我会很好= 1,i = 2,但是一旦你得到i = 3,就没有listB [i],因为列表B只有一个位于0,1和2位置的elemnet,所以你得到了你得到的错误。
我希望有所帮助。祝你好运:)
答案 1 :(得分:1)
我会使用Math.max(int,int)
来获取最大长度。然后声明新数组,然后迭代添加像
public static int[] addArray(int[] listA, int[] listB) {
int aLen = listA.length;
int bLen = listB.length;
int len = Math.max(aLen, bLen);
int[] pickedList = new int[len];
for (int i = 0; i < len; i++) {
if (i < aLen && i < bLen) {
pickedList[i] = listA[i] + listB[i];
} else if (i < aLen) {
pickedList[i] = listA[i];
} else {
pickedList[i] = listB[i];
}
}
return pickedList;
}
答案 2 :(得分:1)
对于你的第一个if语句,你有aLen >= bLen
然后在for循环中循环aLen的长度。在这个for循环中,您尝试在索引i处访问listB的元素。但是,由于listA较长,因为listA的长度比listB的长度长,所以元素listB[i]
将不存在。
答案 3 :(得分:0)
public static int[] AddArray(int[] listA, int[] listB)
{
int smallList[], bigList[], sums[];
int pos;
if (listA.length >= listB.length) {
smallList = listB;
bigList = listA;
} else {
smallList = listA;
bigList = listB;
}
sums = new int[bigList.length];
for (pos=0; pos < smallList.length; ++pos) {
sums[pos] = smallList[pos] + bigList[pos];
}
for (; pos < bigList.length; ++pos) {
sums[pos] = bigList[pos];
}
return sums;
}
答案 4 :(得分:0)
如果有两个数组
arr1 = [1, 2, 3, 4, 5]
arr2 = [6, 7, 8]
我们可以使用较低长度的两个数组作为循环条件(ind < lower_length
)来摆脱异常。例如,
int array1_length = arr1.length; // 5
int array2_length = arr1.length; // 3
然后我们可以获得下限这样的方式
int limit = (array1_length > array2_length) ? array2_length : array1_length;
或
int limit = Math.max(array1_length, array2_length);
然后可以使用for
循环中的限制,例如
for(int ind = 0; ind < limit; ind++){
//sum = arr1[ind] + arr2[ind];
}
我希望它会对你有所帮助。
答案 5 :(得分:0)
试试这个:
public static int[] AddArray(int[] listA, int[] listB)
{
int aLen = listA.length;
int bLen = listB.length;
int[] pickedList = null;
int i,j;
//if array 1 is longer, make picklist have same number of elements then add
//both array elements together
if (aLen >= bLen)
{ pickedList = new int[aLen];
for( i = 0; i < bLen; i ++)
{
pickedList[i] = listA[i] + listB[i];
}
for( j = i; j < aLen; j++) // listB exhaust so add remaining elements of listA to pickedList
{
pickedList[j] = listA[j] ;
}
}
//if array 2 is longer, make picklist have same number of elements then add
//both array elements together
else
{
pickedList = new int[bLen];
for( i = 0; i < aLen; i ++)
{
pickedList[i] = listA[i] + listB[i] ;
}
for( j = i; j < bLen; j ++)// listA exhaust so add remaining elements of listB to pickedList
{
pickedList[j] = listB[j];
}
}
return pickedList;
}