替换二维数组中的行和列
Replacing rows and columns in a 2d array
我有一个二维数组:
1 0 1 1
1 1 1 1
1 1 1 1
1 1 1 1
我必须编写一个程序来检查数组中是否有 0,如果有,则将行和列替换为 0,这样之后看起来像这样:
0 0 0 0
1 0 1 1
1 0 1 1
1 0 1 1
到目前为止,这是我的代码:
public class Run {
public static void main(String[] args){
//defining 2d array
int[][] m = { {1,0,1,1},
{1,1,1,1},
{1,1,1,1},
{1,1,1,1}};
int[][] newArray = zero(m);
//looping through the array to get rows and columns for the array
//rows
for (int i = 0; i < m.length; i++) {
//columns
for (int j = 0; j < m[0].length; j++) {
//check if the integer is the last in the row
if(j== m.length-1){
//print the rows and columns of the array(no space)
System.out.print(newArray[i][j]);
}else{
//print the rows and columns of the array(w/ space)
System.out.print(newArray[i][j] + " ");
}
}
//new line for the new row
System.out.println("");
}
}
//checks if there is a zero in the row
public static int[][] zero(int[][] m) {
//defining row length and column length
int rows = m.length;
int columns = m[0].length;
int[][] tempArray = m;
//looping through the array to get rows and columns
//rows
for (int i = 0; i < rows; i++) {
//columns
for (int j = 0; j < columns; j++) {
//if the number is 0 loop through that row and column again and change everything to 0
if(m[i][j] == 0){
//columns in that row
for(int l = 0; l < rows; l++)
{
tempArray[l][j] = 0;
}
//rows in that column
for(int l = 0; l < columns; l++)
{
tempArray[i][l] = 0;
}
}
}
}
//returning the updated array
return tempArray;
}
}
当我 运行 我的代码时 returns :
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
但是当我取出任何一个时:
//columns in that row
for(int l = 0; l < rows; l++)
{
tempArray[l][j] = 0;
}
或
//rows in that column
for(int l = 0; l < rows; l++)
{
tempArray[l][j] = 0;
}
它 returns :
0 0 0 0
1 1 1 1
1 1 1 1
1 1 1 1
或
1 0 1 1
1 0 1 1
1 0 1 1
1 0 1 1
问题是线路
int[][] tempArray = m;
这使得 tempArray
和 m
成为 完全相同的实例 ,因此您实际上只有一个矩阵。
你应该这样做
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];
你在一个循环中检测到 0,然后去修改数据并继续你的循环,现在将看到更多的零,因此设置更多的零。
您应该在发现 0 后中断,或者拆分检测并 "rewriting" - 先进行所有检测,然后再进行所有重写。
我有一个二维数组:
1 0 1 1
1 1 1 1
1 1 1 1
1 1 1 1
我必须编写一个程序来检查数组中是否有 0,如果有,则将行和列替换为 0,这样之后看起来像这样:
0 0 0 0
1 0 1 1
1 0 1 1
1 0 1 1
到目前为止,这是我的代码:
public class Run {
public static void main(String[] args){
//defining 2d array
int[][] m = { {1,0,1,1},
{1,1,1,1},
{1,1,1,1},
{1,1,1,1}};
int[][] newArray = zero(m);
//looping through the array to get rows and columns for the array
//rows
for (int i = 0; i < m.length; i++) {
//columns
for (int j = 0; j < m[0].length; j++) {
//check if the integer is the last in the row
if(j== m.length-1){
//print the rows and columns of the array(no space)
System.out.print(newArray[i][j]);
}else{
//print the rows and columns of the array(w/ space)
System.out.print(newArray[i][j] + " ");
}
}
//new line for the new row
System.out.println("");
}
}
//checks if there is a zero in the row
public static int[][] zero(int[][] m) {
//defining row length and column length
int rows = m.length;
int columns = m[0].length;
int[][] tempArray = m;
//looping through the array to get rows and columns
//rows
for (int i = 0; i < rows; i++) {
//columns
for (int j = 0; j < columns; j++) {
//if the number is 0 loop through that row and column again and change everything to 0
if(m[i][j] == 0){
//columns in that row
for(int l = 0; l < rows; l++)
{
tempArray[l][j] = 0;
}
//rows in that column
for(int l = 0; l < columns; l++)
{
tempArray[i][l] = 0;
}
}
}
}
//returning the updated array
return tempArray;
}
}
当我 运行 我的代码时 returns :
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
但是当我取出任何一个时:
//columns in that row
for(int l = 0; l < rows; l++)
{
tempArray[l][j] = 0;
}
或
//rows in that column
for(int l = 0; l < rows; l++)
{
tempArray[l][j] = 0;
}
它 returns :
0 0 0 0
1 1 1 1
1 1 1 1
1 1 1 1
或
1 0 1 1
1 0 1 1
1 0 1 1
1 0 1 1
问题是线路
int[][] tempArray = m;
这使得 tempArray
和 m
成为 完全相同的实例 ,因此您实际上只有一个矩阵。
你应该这样做
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];
你在一个循环中检测到 0,然后去修改数据并继续你的循环,现在将看到更多的零,因此设置更多的零。
您应该在发现 0 后中断,或者拆分检测并 "rewriting" - 先进行所有检测,然后再进行所有重写。