2017-06-14 26 views
1

因此,我正在開發一個簡單的程序,詢問用戶需要多少列和行,然後生成一個字符串,其大小如下代碼(改編自何某種開發商作出回答另一個問題)帶字符串的Java 2D數組,需要添加一個簡單的功能

String[][] grid = new String[int1][int2]; 
        String AB = "_W"; 
        SecureRandom rnd = new SecureRandom(); 
        for (int i = 0; i < grid.length; i++) { 
         StringBuilder sb = new StringBuilder(int1); 
         for (int j = 0; j < grid[i].length; j++) { 
          sb.append(AB.charAt(rnd.nextInt(AB.length()))); 
          sb.toString(); 
          grid[i][j] = sb.toString(); 
         } 
        } 

        for (int i = 0; i < grid.length; i++) { 
         for (int j = 0; j < grid[i].length; j++) { 
          System.out.print(""+grid[i][j]); 
         } 
         System.out.println(); 
        } 

       } 

現在,這有一個錯誤,我似乎無法修復,我收集通過INT1和INT2想要的大小(INT1爲行和INT2是列),但輸出會遵守行數(int2),但似乎並不尊重列號。這裏有一個例子,如果我定義INT1(行)= 3和INT2(列)= 4,這裏的輸出:

_____W__W_ 
_____W__W_ 
_____W__WW 

正如你可以看到,還有3行,但10列,這是爲什麼?我如何解決它?

我還需要實現一個簡單的插件,我似乎無法得到我的頭。在第一行中,需要(在一個隨機位置,只需要是第一行)char'S',最後一行需要char'E'(也是隨機位置)。他們不能添加到他們各自的列的大小,所以他們需要替換'_'或'W'。任何幫助? :D

+3

它看起來像你需要一個[rubber_duck(https://en.wikipedia.org/wiki/Rubber_duck_debugging) –

+1

「但10列,這是爲什麼?」 < - 因爲你有一個2d的字符串數組,其中一些字符串長度只有1個字符。你每個字符串得到多於1個字符,因爲你不需要重新設置,而是在內部循環中附加到你的StringBuilder sb。無論如何你爲什麼要使用StringBuilder?編輯:由於你沒有清除你的StringBuilder,你的grid [x] [0]將會有1個字符,grid [x] [1]包含2個字符,grid [x] [2] 3個字符等等。 –

+0

啊,你是對的,我會研究它 – Vist4w

回答

1

你的問題是你不清除StringBuilder。在內部循環中。所以第一次你寫1個字符,超過2個字符和3和4(其中總計10個)

您可以修復它這樣:

String[][] grid = new String[int1][int2]; 
String AB = "_W"; 
SecureRandom rnd = new SecureRandom(); 
for (int i = 0; i < grid.length; i++) { 
    StringBuilder sb = new StringBuilder(int1); 
    for (int j = 0; j < grid[i].length; j++) { 
     sb.setLenght(0); // <-- To reset the data 
     sb.append(AB.charAt(rnd.nextInt(AB.length()))); 
     sb.toString(); // You can delete this line which does nothing. 
     grid[i][j] = sb.toString(); 
    } 
} 

for (int i = 0; i < grid.length; i++) { 
    for (int j = 0; j < grid[i].length; j++) { 
     System.out.print(""+grid[i][j]); 
    } 
    System.out.println(); 
} 

但我會避免SB在所有...並與S和E

String[][] grid = new String[int1][int2]; 
String AB = "_W"; 
SecureRandom rnd = new SecureRandom(); 
for (int i = 0; i < grid.length; i++) { 
    for (int j = 0; j < grid[i].length; j++) { 
     grid[i][j] = "" + AB.charAt(rnd.nextInt(AB.length())); 
    } 
} 

for (int i = 0; i < grid.length; i++) { 
    for (int j = 0; j < grid[i].length; j++) { 
     System.out.print(""+grid[i][j]); 
    } 
    System.out.println(); 
} 

grid[0][rnd.nextInt(int2)] = "S"; 
grid[int1-1][rnd.nextInt(int2)] = "E"; 
+0

S和E呢?你建議使用替換方法嗎?但是,謝謝,它的工作! – Vist4w

+0

(1)哪個S和E?由SB我的意思是StringBuilder。 (2)我不確定你的意思是代替哪種方法。 (3)如果有效,請接受答案。 –

+1

我的意思是我寫的最後一段。 「還需要實現一個簡單的插件,我似乎無法擺脫困境,在第一行中,需要(在隨機位置,必須是第一行)char'S',並且最後一行需要字符'E'(也是隨機位置),它們不能添加到它們各自列的大小,因此它們需要替換'_'或'W'。「 – Vist4w