为了账号安全,请及时绑定邮箱和手机立即绑定

如何对两个不同大小的数组进行计算?

如何对两个不同大小的数组进行计算?

米琪卡哇伊 2023-02-23 10:44:55
我有两个不同大小的数组,我试图循环并对其执行计算,但我最终得到了不正确的输出。这是数组:int[] array1 = [5, 10, 2]int[] array2 = [11, 23, 4, 6, 5, 8, 9]    int[] array1 = {5, 10, 2};    int[] array2 = {11, 23, 4, 6, 5, 8, 9};    ArrayList<Integer> calculationsArray = new ArrayList<Integer>();    int calculations = 0;    for(int i = 0; i < array1.length; i++) {        for(int j = 0; j < array2.length; j++) {        calculations = ((array1[i] + array2[j]) % 10);    }    calculationsArray.add(calculations);    }我期待[6, 3, 6, 1, 0, 8, 1]. 4 个循环的示例计算为:(11 + 5) % 10 = 6(23 + 10) % 10 = 3(4 + 2) % 10 = 6(6 + 5) % 10 = 1但实际输出是:[4, 9, 1]
查看完整描述

2 回答

?
德玛西亚99

TA贡献1770条经验 获得超3个赞

让我们首先谈谈为什么你看到你所看到的。


我在这里重新发布了您的代码,缩进已更改以反映嵌套:


for(int i = 0; i < array1.length; i++) {

    for(int j = 0; j < array2.length; j++) { // <--- This loop

        calculations = ((array1[i] + array2[j]) % 10);

    }

    calculationsArray.add(calculations);

}

让我们来看看我在上面标记的那个内部循环。请注意,在循环的每次迭代中,您都设置calculations了一个新值。这会覆盖之前计算的值,因此当内部循环完成运行时, 的值calculations将等于该循环中计算的最后一个值。这就是你实际看到的原因,因为


当 时i = 0,内循环的最后一次计算为(array1[0] + array2[6]) % 10,即(5 + 9) % 10= 4,

当 时i = 1,内循环的最后一次计算为(array1[1] + array2[6]) % 10,即(10 + 9) % 10= 9,

当 时i = 2,内循环的最后一次计算为(array1[2] + array2[6]) % 10,即(2 + 9) % 10= 1。

嘿,看![4, 9, 1]你看到的就是你的。


下一个问题是如何解决这个问题。我认为您在这里遇到的主要问题是双重嵌套循环可能不是解决问题的方法。具体来说,这里的双 for 循环将运行array1.length×array2.length次,这远远超过您需要它运行的次数。


所以第一个问题——循环应该运行多少次?好吧,您希望输出数组的长度是两个输入数组中较长者的长度,即Math.max(array1.length, array2.length)倍数。你能做一个循环来计算那个数字吗?


然后您需要处理这样一个事实,即您的循环可能需要多次循环遍历每个输入数组。在您给出的示例中,您将读取array1多次的值,因为array2更长,但是如果更长,您可能不得不读取array2多次的值array1。


作为如何执行此操作的提示,请查看当索引变得太大时是否可以使用 mod 运算符%环绕。


希望这可以帮助!


查看完整回答
反对 回复 2023-02-23
?
白衣非少年

TA贡献1155条经验 获得超0个赞

怎么样(未优化):


ArrayList<Integer> calculationsArray = new ArrayList<Integer>();

int calculations = 0;

int j = 0;

while (j < array2.size()) {

     for (int i = 0; i < array1.size(); i++) {

           calculations = ((array1.get(i) + array2.get(j)) % 10);

          calculationsArray.add(calculations);

     }

     j++;

}


查看完整回答
反对 回复 2023-02-23
  • 2 回答
  • 0 关注
  • 132 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信