我目前正在进行一项我必须阅读的作业,一个已经声明的2d数组,并更改与其上,下,右或左侧颜色相邻的0的“颜色”。
我试图循环一个字符数组,首先用ascii数字打印出来,然后将颜色旁边的所有0改为相同的“颜色” 例如 如果我有类似
的东西 1000
G001
1010
通过我的程序将它最终像这样
1GGG
GGG1
1G10
我让它循环两次,首先显示没有更改值的数组。第二个,应该把它改成我在我的例子中所展示的东西。
这是我到目前为止所提出的
public class MatrixTest{
public static void main(String[]args)
{int[][] array = {{1,0,0,0,0,0,0},
{1,1,1,1,'G',0,0},
{0,0,'B',0,1,0,1},
{1,1,1,1,1,1,1},
{1,0,1,'R',1,0,1},
{1,0,1,0,1,0,1},
{0,0,0,1,1,1,1},
{0,'B',0,1,0,'G',0}};
for(int row = 0; row < 8; row++)
{
for(int col = 0; col < 7; col++)
{
System.out.print(array[row][col] + " ");
}System.out.println();
}
System.out.println("\n\n" + "Output: ");
for(int i = 0; i < 8; i++)
{
for(int j = 0; j < 7; j++)
{
if(array[i][j] != 0 && array[i][j] != 1){
System.out.print(array[i][j]);
}//Here I would like to say something like if(array[i+1][j] == 0) change color
//and do so for the other cases as well, i-1, j+1, j-1... doesn't move diagonally
if(array[i][j] == 1)
System.out.print(1 + "");
}System.out.println();
}
}
} `
到目前为止,第二对循环仅显示1和颜色,如果我在0中添加的方式与1s相同,那么它将与第一个数组相同,再次打印出来将毫无意义。一旦所有与颜色相邻的0都被更改,我就可以将它们转换为相对的ascii值。
我想更改第一个if语句中的颜色,但我想知道是否有更好的方法可以做到这一点。
答案 0 :(得分:1)
只是为了让您知道,在打印答案之前,您将不得不构建新的2d阵列。目前你正在尝试打印出答案,但是在你的示例输出中,第一行中的第0个第二库仑与任何颜色都不相邻,这意味着改变颜色的0可以改变其他颜色0到相同的颜色。这使得在构建新的2d阵列时难以打印出答案。如果我正在做这个赋值,我会构建一个递归函数,将所有0与相邻颜色更改为这些颜色,如果在循环后任何0更改,您将再次调用该函数。类似的东西:
function declaration(array){
int colorChanged = 0;
for row{
for coulomb{
if (color adjacent){change color; colorChanged = 1;}
}
}
if (colorChanged == 1){function(array)}
return array
}
请注意,这只是一个示例,而不是正常工作的代码,但希望它能为您提供一些想法。