转换二维数组内的相邻值

时间:2015-05-13 04:31:52

标签: java arrays

我目前正在进行一项我必须阅读的作业,一个已经声明的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语句中的颜色,但我想知道是否有更好的方法可以做到这一点。

1 个答案:

答案 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
}

请注意,这只是一个示例,而不是正常工作的代码,但希望它能为您提供一些想法。