【问题标题】:How to multiply two dimensional array by factor如何将二维数组乘以因子
【发布时间】:2018-01-03 17:30:22
【问题描述】:

我有一个二维数组

private static int [][] n = {{1, 2, 3, 4}, {5, 6, 7, 8}}; 

我有

int m = 3; 

如何将二维数组中的每个元素乘以 3?
所以输出会是这样的:

{{3, 6, 9, 12},{15, 18, 21, 24}}

另外,如果我有一个像

这样的矩阵
{{1, 2, 3, 4, 5}, 
{6, 7, 8, 9, 10}, 
{11, 12, 13, 14, 15}, 
{16, 17, 18, 19, 20}, 
{21, 22, 23, 24, 25}}, 

如何打印对角线元素?

{1,7,13,19,25} and {5,9,12,17,20}

我想知道算法,因为我使用了乘法数组

private static int[] n = {1, 2, 3, 4, 5, 6, 7};

private static int[] multiply(int[] n, int m) {

    int array[] = new int[n.length];
    for (int i = 0; i < n.length; i++) {
        array[i] = n[i] * m;
    }
    return array;

}

【问题讨论】:

    标签: java arrays multidimensional-array


    【解决方案1】:

    只需迭代两个维度:

    private static int[][] multiply(int[][] n, int m) {
        int array[][] = new int[n.length][];
        for (int i = 0; i < n.length; i++) {
            array[i] = new int[n[i].length];
            for (int j = 0; j < n[i].length; j++) {
                array[i][j] = n[i][j] * m;
            }
        }
        return array;
    }
    

    【讨论】:

    • 它给了我一个错误的回报(found int[], required int[][])
    • @MichaelKors 是的,我搞砸了变量定义,这是一个过失。已编辑和修复。
    【解决方案2】:

    为此您需要 2 个 for 循环

    int [][] n = {{1, 2, 3, 4}, {5, 6, 7, 8}};
    for(int i=0;i<2;i++)
        for(int j=0;j<4;j++)
            n[i][j]*=3;
    

    这里我们按行访问数组。

    【讨论】:

      【解决方案3】:

      由于其他答案没有告诉你如何打印对角线元素,这里是:

      for (int i = 0; i < n.length; i++)
          System.out.println(n[i][i]);
      

      因为对角线元素的第一个和第二个索引相等:[i][i]

      【讨论】:

      • 反向对角元素:System.out.println(n[i][n.length-1-i]);
      【解决方案4】:

      对于第一个任务,您可以使用一个简单的循环:

      int m = 3;
      for(int i = 0; i < n.length; i++){
          for(int j = 0; j < n[i].length; j++){
              n[i][j] *= m;
          }
      }
      

      对于第二个,重要的是要观察left-up to right-down 的对角线元素具有相同的索引行和列。从left-down to right-up 对角线你只需要反转一个行或列。例如反转行,而不是从 0 开始,而是以 row.length - 1 开始

       | 0  1  2  3  4
      ------------------
      0| 1           5
      1|    7     9
      2|      13
      3|   17     19    
      4|21           25
      

      所以为了得到对角线你只需要做一个循环:

      int[] d1 = new int[array.length];
      
      int[] d2 = new int[array.length];
      
      for(int i = 0; i < array.length; i++){
          d1[i] = array[i][i];
          d2[i] = array[array.length-1-i][i];
      }
      

      您只需确保行和列的长度相同,否则可能会抛出ArrayIndexOutOfBoundsException

      【讨论】:

        猜你喜欢
        • 2016-04-15
        • 1970-01-01
        • 1970-01-01
        • 2014-02-28
        • 2013-09-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-18
        相关资源
        最近更新 更多