0

Я работаю над программой, которая содержит 2-мерный массив символов 16x32. Я хочу сделать это, начиная с данного элемента в этом массиве, найти все элементы, которые имеют одно и то же значение (в моем случае пустое пространство) и которые горизонтально и/или вертикально связаны друг с другом.Java: найти в массиве 2d все смежные элементы с тем же значением, начиная с заданного элемента

Метод, который я использую, хранит индексы, которые он находит внутри другого массива, называемый 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); 
     } 
    } 
} 

Спасибо!

ответ

0

На основе предоставленной вами информации я сделал заявление, чтобы проверить свой метод:

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 

который что метод работает правильно.

Возможно, проблема кроется в другом месте вашей программы.