2017-07-27 41 views
2

二维数组我有二维数组如何乘以系数

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; 

} 

回答

3

只是重复两个维度:

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; 
} 
+0

它给了我一个返回错误(找到int [],必需int [] []) –

+0

@MichaelKors是的,我拙劣的变量定义,mea culpa。编辑并修复。 – Mureinik

2

需要2循环这个

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; 

在这里,我们访问数组维数组行明智。

1

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

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

因为对角线元素具有相等的第一和第二指数:[i][i]

+0

反向对角元素:System.out.println(n [i] [n.length-1-i]); –

0

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

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