Arrays-Java,与数组相同位置的元素之和

Arrays-Java, sum of the elements in same positions with the array

我有一个练习,看看哪里出了问题。我将不胜感激:)

编写代码,将有两个 int 类型的数组和 return 更大的数组(如果两个数组之一更大)以及与数组相同位置的元素的总和。

public class TwoArrays {
    public static void main(String[] args) {
        int[] arrayA = {1, 5, 2, 6, 8};
        int[] arrayB = {4, 5, 7, 10, 7, 9, 7};
        int lengthA = arrayA.length;
        int lengthB = arrayB.length;
        int i=0;
        if (lengthA < lengthB) {
            for (arrayB[i] = 0; i < lengthB; i++) {
                arrayB[i] = arrayA[i] + arrayB[i];
                System.out.println(arrayB[i]);
            }

        } else if (lengthA > lengthB) {
            for (arrayA[i] = 0; i < lengthA; i++) {
                arrayA[i] = arrayA[i] + arrayB[i];
                System.out.println(arrayA[i]);
            }

        } else {
            for (arrayB[i] = 0; i < lengthB; i++) {
                arrayB[i] = arrayA[i] + arrayB[i];
                System.out.println(arrayB[i]);
            }
        }
    }
}

应该是

for (int i = 0; i < lengthB; i++)

当你使用

for (arrayB[i] = 0; i < lengthB; i++)

您将数组的第一个元素设置为 0,而不是您可能想要的 i 索引变量。

另外,你应该做一些事情,比如找出哪个数组更大,然后使用像 bigArray = arrayA, smallArray = arrayB 这样的变量。然后,你只需要写一个for循环。

再次尝试检查第一个 For 循环的条件。如果您尝试在大于数组长度的位置访问数组,您将得到 java.lang.ArrayIndexOutOfBoundsException。如果您无法理解这段代码,我建议您尝试调试它。

您的代码中几乎没有更正。

  1. 用于迭代的索引值应该从0开始。
  2. arrayB[i] = arrayA[i] + arrayB[i];
    arrayA[i] = arrayA[i] + arrayB[i];

在上面的行中,如果索引值(i) 超过lengthA 或lengthB 的长度,JVM 有可能抛出ArrayIndexOutOfBoundsException。所以应该在每次迭代时检查它。一旦索引值超过lengthA或lengthB,零可以作为默认值添加到arrayB[i]。所以我使用三元运算符来检查每次迭代的索引值。 3. 不需要 else if 块。因为我们只使用 2 个数组,如果和其他对你的情况就足够了。

修改后的代码:

public class TwoArrays {
    public static void main(String[] args) {
        int[] arrayA = {1, 5, 2, 6, 8};
        int[] arrayB = {4, 5, 7, 10, 7, 9, 7};
        int lengthA = arrayA.length;
        int lengthB = arrayB.length;

        if (lengthA < lengthB) {
            for (int i = 0; i < lengthB; i++) {
                int temp = i < lengthA ? arrayA[i] : 0; // used ternary operator here
                arrayB[i] = arrayB[i] +  temp;   
                System.out.println(arrayB[i]);
            }

        } else {
            for (int i = 0; i < lengthA; i++) {
                int temp = i < lengthB ? arrayB[i] : 0; // used ternary operator here
                arrayA[i] = arrayA[i] + temp;   
                System.out.println(arrayA[i]);
            }
        }
    }
}

应选择更大的数组(或最后一个),并添加元素直到较短的数组结束。

public static int[] joinArrays(int[] a, int[] b) {
    int[] shorter, bigger;
    if (b.length < a.length) {
        shorter = b;
        bigger = a;
    } else {
        shorter = a;
        bigger = b;
    }
    for (int i = 0; i < shorter.length; i++) {
        bigger[i] += shorter[i];
    }
    return bigger;
}

测试:

int[] arrayA = {1, 5, 2, 6, 8};
int[] arrayB = {4, 5, 7, 10, 7, 9, 7};
System.out.println(Arrays.toString(joinArrays(
    new int[]{1, 5, 2,  6, 8}, 
    new int[]{4, 5, 7, 10, 7, 9, 7}
)));

输出:

[5, 10, 9, 16, 15, 9, 7]