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

将嵌套数组中的元素乘以某个值,然后将结果相加

司寇阳朔
2023-03-14

我正在尝试将数组的每个“列”乘以一个特定的数字,然后对每个“行”的结果求和。

我能够找出如何在单个阵列中执行此操作,但在2d阵列中却很难找到。

我需要递归地做这件事,所以没有循环。有人能提供一个伪代码,或者解释我应该为每列采取什么步骤吗?

public static int didIt(int[] d, int n) {        
    //base or terminating condition
    if (n <= 0) {
        return 0;
    }
    if (n == 1) {
        return didIt(d, n - 1) + d[n - 1] * 10;
    }
    if (n == 2) {
        return didIt(d, n - 1) + d[n - 1] * 10;
    }
    if (n == 3) {
        return didIt(d, n - 1) + d[n - 1] * 10;
    }
    if (n == 4) {
        return didIt(d, n - 1) + d[n - 1] * 10;
    }
    if (n == 5) {
        return didIt(d, n - 1) + d[n - 1] * 10;
    } else {
        return didIt(d, n - 1) + d[n - 1];
    }
}

public static void main(String[] args) {

    int[] array2 = {1, 2, 3, 4, 5};

    System.out.println(didIt(array2, array2.length));
}

如何将此代码转换为2d数组版本?

共有2个答案

黄高爽
2023-03-14

您仍然可以使用相同的逻辑;只需更改调用didIt方法的方式:

public static void main(String[] args) {
        int[][] arr = { { 1, 1, 1, 1 },
                { 2, 2, 2, 2 },
                { 3, 3, 3, 3 } };
        
        for(int a[]: arr) {
           System.out.print(didIt(a,a.length));
        }

无需更改didIt中的任何内容。

此外,我假设您在这里展示的didIt是为了演示,否则在if中有大量重复的代码,您可以避免这些代码。

东方嘉佑
2023-03-14

对于n的每个硬编码值,不需要重复冗余的条件逻辑。

此外,无需将数组中的每个元素乘以10,相反,我们可以将总和乘以10。

这就是如何修复计算数组和的递归方法

public static int arrSum(int[] arr, int pos) {
    if (pos == arr.length) { // base case
        return 0;
    }
    
    return arr[pos] + arrSum(arr, pos + 1); // recursive case
}

以及如何计算嵌套数组的元素之和(逻辑几乎相同):

public static int matrixSum(int[][] matrix, int pos) {
    if (pos == matrix.length) { // base case
        return 0;
    }
    
    return arrSum(matrix[pos], 0) + matrixSum(matrix, pos + 1); // recursive case
}

main()

public static void main(String[] args) {
    int[][] matrix = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
    System.out.println(matrixSum(matrix, 0) * 10);
}

输出:

450 // sum of numbers from 1 to 9 equels 45, and * 10 = 450

旁注:Java没有二维数组(所以这个术语不正确准确)。我们可以创建一个嵌套数组——一个由其他数组组成的数组。

 类似资料:
  • 想象我们有两个数组: 获取包含两者相乘值的第三个String数组的更好方法是什么?比如: 我知道,我可以使用循环并将1中的每个元素与2中的每个元素连接起来,并将结果放入3中。但实际上和中的元素要多得多。Java中是否有专门的工具使其更有效?

  • 我试图计算用户购物车中物品的总成本。我的方法是将项目成本和数量存储在Arraylist中,然后乘以该值再相加。例如,这是我的数组列表。我想做2.00*5.00 3.00*6.00 4.00*7.00 5.00*8.00。到目前为止,我所做的是将第一个数组列表中的第一个数字乘以第二个数组列表的每个项目。这不是我想做的,有人能帮我吗。

  • 问题内容: 我需要将每个键的值相乘,然后将所有值加在一起以打印一个数字。我知道这可能超级简单,但我被卡住了 在我看来,我可以通过以下方式解决此问题: 但是那样的事情是行不通的:) 问题答案: 如果需要个人,可以使用dict理解: 或直接求和:

  • 我有一个数组[25,-6,14,7,100]。预期输出为 基本上,循环时下一个元素被减/加到当前元素中。求和和乘积很容易,因为我只需要做 它在线程“main”java.lang.ArrayIndexOutOfBoundsException中给出了

  • 该方法通过用户的输入获取给定数据集中的两个最大整数,并计算它们的乘积。它对每个输入都很有效,直到我尝试了两个整数和的数组,它返回。 这是我的Java方法: 这是我的方法:

  • 我解决了一个编程问题,如果有两个数字A和B,我必须在乘积的二进制形式中找到1的个数。A和B的范围是[0,10^9]包括在内。这是我写的代码。 这对输入(3,4)很有效,但当我尝试(323294746475)作为输入时,代码不起作用,结果显示0作为答案。我在不同的地方放了几个输出语句进行调试,发现有了这个输入,乘法的结果是-1170032381(这是错误的),因此while循环的条件失败。所以,我像