当前位置: 首页 > 知识库问答 >
问题:

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

连正信
2023-03-14

我有一个练习,找出出了什么问题。我会感激的帮助:)

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

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]);
            }
        }
    }
}

共有3个答案

施英哲
2023-03-14

尝试再次检查第一个For-Loop的条件。如果您尝试访问大于数组长度的数组位置,您将获得java.lang.ArrayIndexOutOfBoundsException.如果您无法理解此代码,我建议您应该尝试调试此代码。

薛修能
2023-03-14

代码中几乎没有更正。

    < li >用于迭代的索引值应该从0开始。 < Li > < code > arrayB[I]= arrayA[I]arrayB[I]; < br > < code > 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]);
            }
        }
    }
}
邹弘
2023-03-14

应该是

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

当你使用

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

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

此外,您应该做一些事情,比如找到哪个数组更大,然后使用bigArray=arrayA, Small Array=arrayB之类的变量。然后,您只需为Loop编写一个。

 类似资料:
  • 问题 你想从数组中删除相同元素。 解决方案 Array::unique = -> output = {} output[@[key]] = @[key] for key in [0...@length] value for key, value of output [1,1,2,2,2,3,4,5,6,6,6,"a","a","b","d","b","c"].unique() # =

  • 在R中,我可以在矩阵和(共形)向量之间进行分段乘法,例如: 矩阵的每一行都与相应的向量元素相乘。我也可以对维度大于2的数组做同样的事情: 同样,每一行都与相应的向量元素相乘。我能为3d阵列和2d矩阵做类似的事情吗?我只想让数组中的每个子矩阵都按元素乘以一个矩阵。

  • 本文向大家介绍Java程序的数组元素相乘,包括了Java程序的数组元素相乘的使用技巧和注意事项,需要的朋友参考一下 查找数组元素的乘积。 创建一个空变量(product)。 用1初始化它。 在循环中遍历每个元素(或从用户那里获取每个元素)将每个元素乘以乘积。 打印乘积(product)。 示例 输出结果

  • 我有办法转移arr元素: 当我执行这段代码时,我遇到了一个异常: 据我所知,程序需要更多的空间来包含另一个项目。但是我不需要添加更多的项目,我需要已经存在的移动。用参数,如果参数为负,所有数组向左移动,如果为正向右移动,如果为零-什么都不会发生。

  • 我有一个单词流,我想根据相同元素的出现对它们进行排序。 例如:{hello,world,hello} 至 你好,{你好,你好} 谢谢你