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

标签 java arrays

我有两个不同大小的数组,我试图循环遍历并执行计算,但最终得到了不正确的输出。

这是数组:

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 个循环的示例计算如下:

  1. (11 + 5) % 10 = 6
  2. (23 + 10) % 10 = 3
  3. (4 + 2) % 10 = 6
  4. (6 + 5) % 10 = 1

但实际输出是:[4, 9, 1]

最佳答案

让我们首先谈谈为什么您会看到您所看到的内容。

我已在此处重新发布您的代码,并更改了缩进以反射(reflect)嵌套:

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 更长,但您也可能必须轻松读取如果 array1 更长,则 array2 多次。

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

希望这有帮助!

关于java - 如何对两个不同大小的数组进行计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56776583/

相关文章:

java.lang.OutOfMemory错误: Java heap space in JasperReports

java - SiteMinder 和待开发的 java/.Net 定制解决方案集成 Single Sign On 的方法有哪些?

java - 向 LAN 中的每个人发送 UDP 数据包?

java - 应用 BlurMaskFilter 时 TextView 被切断

arrays - 使用解码到通用接口(interface)时如何验证 JSON?

java - ListView - 通过滚动加载更多项目

arrays - 在numpy中获取3D数组的2D切片的平均值

javascript - JS - 给定对象数组,我可以返回刚刚选定的属性的数组吗?

javascript - for 循环后解析数组后未定义

python - 如何在python中使用矩阵和向量之间的元素乘法