[英]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.