Java如何填充二维数组

时间:2016-04-06 22:05:33

标签: java arrays multidimensional-array

所以,例如,这就是我要问的:你怎么能转换它:

{{0, 1, 2},
 {3, 4, 5},
 {6, 7, 8},
 {9, 0, 1}}

到此:

{{0, 1, 2},
 {0, 1, 2},
 {0, 1, 2},
 {0, 1, 2}}

这是我到目前为止所做的:

void fillDown(int[][] grid) {
    int[][] m = {{}};
        int[][] newArray = zero(m);
        for (int i = 0; i < m.length; i++) {
            for (int j = 0; j < m[0].length; j++) {
                if(j== m.length-1){
                    print(newArray[i][j]);
                }else{
                    print(newArray[i][j] + " ");
                }
            }
        }
    }


    int[][] zero(int[][] m) {
        int rows = m.length;
        int columns = m[0].length;
        int[][] tempArray = new int[rows][columns];

        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < columns; j++) {
                tempArray[i][j] = m[i][j];
            }
        }
        return tempArray;
}

但是,当我输入一些值时,它不能按预期工作

例如,当我输入如下内容时:

{{0, 1, 2},
 {3, 4, 5},
 {6, 7, 8},
 {9, 0, 1}}

它仍会返回我输入的内容:

{{0, 1, 2},
 {3, 4, 5},
 {6, 7, 8},
 {9, 0, 1}}

我该怎么做?

3 个答案:

答案 0 :(得分:1)

使用嵌套循环。

static void fillDown(int[][] grid) {
    for (int i = 1 ; i < grid.length ; i++){
        for (int j = 0 ; j < grid[i].length ; j++) {
            grid[i][j] = grid[0][j];
        }
    }
}

或制作原始数组的副本。

static void fillDown(int[][] grid) {
    for (int i = 1 ; i < grid.length ; i++){
        grid[i] = Arrays.copyOf(grid[0], grid[0].length);
    }
}

我不会使用以下方法,因为它只是复制引用,因此对其中一个索引所做的每个更改都会影响所有其他索引。

for (int i = 1 ; i < grid.length ; i++) {
    grid[i] = grid[0]; // /!\ NOT A GOOD IDEA
}

答案 1 :(得分:1)

在盯着你的问题后,看起来你正在谈论你的int[][] zero(int[][] m)方法(如果我错了,请纠正我)。

int[][] zero(int[][] m)方法中,替换

    tempArray[i][j] = m[i][j];

    tempArray[i][j] = j;

看起来应该是这样的:

public static int[][] zero(int[][] m) {
    int rows = m.length;
    int columns = m[0].length;
    int[][] tempArray = new int[rows][columns];

    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < columns; j++) {
            tempArray[i][j] = j;
        }
    }
    return tempArray;
}

运行以下内容:

int[][] array = new int[][]{{0, 1, 2},
                            {3, 4, 5},
                            {6, 7, 8},
                            {9, 0, 1}};
System.out.println("Before:");
for (int[] i : array) {
    for (int j : i) {
        System.out.print(j + " ");
    }
    System.out.println();
}
array = zero(array);
System.out.println("After:");
for (int[] i : array) {
    for (int j : i) {
        System.out.print(j + " ");
    }
    System.out.println();
}

导致:

run:
Before:
0 1 2 
3 4 5 
6 7 8 
9 0 1 
After:
0 1 2 
0 1 2 
0 1 2 
0 1 2 
BUILD SUCCESSFUL (total time: 0 seconds)

答案 2 :(得分:0)

实际上只是好奇你为什么要这样做。无论如何,它可以像:

int[][] a = {{0, 1, 2},
             {3, 4, 5},
             {6, 7, 8},
             {9, 0, 1}};
int[] replacewith = Arrays.copyOf( a[0], a[0].length );
for ( int i = 1; i < a.length; i++ )
{
   a[i] = replacewith;
}