繁体   English   中英

Java如何填充二维数组

[英]Java how to fill down a 2d 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}}

我该怎么做?

使用嵌套循环。

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
}

盯着你的问题看,好像你在说你的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)

其实只是好奇为什么要这么做。 无论如何,它可以像这样完成:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM