0

2次元の16x32文字配列を含むプログラムで作業しています。私がしたいのは、この配列の特定の要素から始めて、同じ値(私の場合は空白 '')を共有し、互いに水平方向および/または垂直方向にリンクしているすべての要素を見つけることです。Java:指定された要素から始まる同じ値を持つすべての隣接要素を2次元配列で見つける

私が使用している方法は、と表示されている別の配列内にあるインデックスを格納します。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 

ましたメソッドが正しく機能することを示します。

おそらく問題はプログラムの他の場所にあります。

関連する問題