【问题标题】:Java: find in 2d array all adjacent elements with the same value, starting from a given elementJava:从给定元素开始,在二维数组中查找具有相同值的所有相邻元素
【发布时间】:2016-11-15 07:09:27
【问题描述】:

我正在开发一个包含二维 16x32 字符数组的程序。我想要做的是,从这个数组中的给定元素开始,找到所有共享相同值的元素(在我的例子中是空格'')并且水平和/或垂直地相互链接。

我使用的方法将它找到的索引存储在另一个数组中,称为 toShow (public static int toShow[][] = new int[30][30];)。问题是这种方法似乎没有向右处理。奇怪的是,它似乎适用于其他方面......这是一个例子:

X1    123
31     1X
211    24
1X1  112X
111 12X34
111•2X32X
1X113X211

在这种情况下,从标记为 • 的元素开始,该方法应该存储每个 ' ' 字符和所有相邻编号...但结果如下:

1••
1••
 1•
 1•
 1•
 1•

然而,如果它从左下角开始,它通常会起作用,即使它确实必须向右转!

我不明白我的代码有什么问题...无论如何这里是奇怪的方法:

public static void getEmptySurrounding(int xcoord, int ycoord) {
    if (toShow[xcoord][ycoord] == 1) {
        return;
    }

    else {
        toShow[xcoord][ycoord] = 1;
    }

    //DOWN
    if((ycoord!=29) && ycoord + 1 < 16) {
        if (board[xcoord][ycoord] == ' ') {
            getEmptySurrounding(xcoord, ycoord + 1);
        }
    }
    //RIGHT
    if((xcoord!=15) && xcoord + 1 < 30) {
        if (board[xcoord][ycoord] == ' ') {
            getEmptySurrounding(xcoord + 1, ycoord);
        }
    }
    //UP
    if((ycoord!=0) && ycoord - 1 >= 0) {
        if (board[xcoord][ycoord] == ' ') {
            getEmptySurrounding(xcoord, ycoord - 1);
        }
    }
    //LEFT
    if((xcoord!=0) && xcoord - 1 >= 0) {
        if (board[xcoord][ycoord] == ' ') {
            getEmptySurrounding(xcoord - 1, ycoord);
        }
    }   
}

谢谢!

【问题讨论】:

    标签: java search recursion multidimensional-array nearest-neighbor


    【解决方案1】:

    根据您提供的信息,我申请了测试您的方法:

    public class Mine {
    
        private static char board[][] = new char[16][32];
        private static int toShow[][] = new int[30][30];
    
        public static void main(String[] args) {
            int n = 0;
            insert(n++, "X1    123");
            insert(n++, "31     1X");
            insert(n++, "211    24");
            insert(n++, "1X1  112X");
            insert(n++, "111 12X34");
            insert(n++, "111 2X32X");
            insert(n++, "1X113X211");
    
            getEmptySurrounding(3, 5);
    
            for (int i = 0; i < 30; i++) {
                for (int j = 0; j < 30; j++) {
                    System.out.print(toShow[j][i]);
                }
                System.out.println();
            }
        }
    
        public static void getEmptySurrounding(int xcoord, int ycoord) {
            if (toShow[xcoord][ycoord] == 1) {
                return;
            }
    
            else {
                toShow[xcoord][ycoord] = 1;
            }
    
            // DOWN
            if ((ycoord != 29) && ((ycoord + 1) < 16)) {
                if (board[xcoord][ycoord] == ' ') {
                    getEmptySurrounding(xcoord, ycoord + 1);
                }
            }
            // RIGHT
            if ((xcoord != 15) && ((xcoord + 1) < 30)) {
                if (board[xcoord][ycoord] == ' ') {
                    getEmptySurrounding(xcoord + 1, ycoord);
                }
            }
            // UP
            if ((ycoord != 0) && ((ycoord - 1) >= 0)) {
                if (board[xcoord][ycoord] == ' ') {
                    getEmptySurrounding(xcoord, ycoord - 1);
                }
            }
            // LEFT
            if ((xcoord != 0) && ((xcoord - 1) >= 0)) {
                if (board[xcoord][ycoord] == ' ') {
                    getEmptySurrounding(xcoord - 1, ycoord);
                }
            }
        }
    
        public static void insert(int n, String a) {
            for (int i = 0; i < 16; i++) {
                board[i][n] = a.length() <= i ? ' ' : a.charAt(i);
            }
        }
    
    }
    

    最后打印出toShow的内容,相关部分为:

    011111100000000000000000000000
    011111110000000000000000000000
    001111110000000000000000000000
    001111100000000000000000000000
    001110000000000000000000000000
    001110000000000000000000000000
    000100000000000000000000000000
    000000000000000000000000000000
    000000000000000000000000000000
    000000000000000000000000000000
    

    这表明该方法可以正常工作。

    所以问题可能出在程序的其他地方。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-10
      • 2015-12-26
      • 1970-01-01
      • 1970-01-01
      • 2019-04-22
      • 2011-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多