2017-04-24 42 views
0

我想創建一個2維數組,其中包含全部大寫的字母。該程序的目標基本上是建立一個單詞搜索難題,我想用隨機字母來填充二維數組,但是使用我目前使用的代碼,表格數組只填充了一個隨機生成的字母字母。有沒有辦法用隨機字母來隨機填充數組?把隨機字母在java中的二維數組

import java.util.*; 
public class puzzle 
{ 
    public static void main 
    { 
     box(); 
     //other methods 

     public static void box() 
     { 
      int rows = 10; 
      int columns = 10; 
      int number = (int) (Math.random() * 26) + 65;  
      char[][] table = new char [rows][columns]; 
      for (int r = 0; r < rows; r++) 
      { 
      for (int c = 0; c < columns; c++) 
      { 
       table[r][c] = (char) number; 
       System.out.print(table[r][c] + " "); 
      } //inner for loop 
      System.out.println(); 
      } //outer for loop 
     } 
    } 
} 

這個代碼能夠打印

Q Q Q Q Q Q Q Q Q Q 
Q Q Q Q Q Q Q Q Q Q 
Q Q Q Q Q Q Q Q Q Q 
Q Q Q Q Q Q Q Q Q Q 
Q Q Q Q Q Q Q Q Q Q 
Q Q Q Q Q Q Q Q Q Q 
Q Q Q Q Q Q Q Q Q Q 
Q Q Q Q Q Q Q Q Q Q 
Q Q Q Q Q Q Q Q Q Q 
Q Q Q Q Q Q Q Q Q Q 

V V V V V V V V V V 
V V V V V V V V V V 
V V V V V V V V V V 
V V V V V V V V V V 
V V V V V V V V V V 
V V V V V V V V V V 
V V V V V V V V V V 
V V V V V V V V V V 
V V V V V V V V V V 
V V V V V V V V V V 

,我希望它是這樣的

A G E C H J E Q D Z 
G H K E Q E N M E J 
H I Z E K H E Q K H 
B Y U M G A E K H M 
N Q A Y R Y E C U E 
Y D W H X S J R S W 
I Y O B N M K G D E 
A D J R E X C B N G 
W R U I G D D G J F 
X C V O E W Q A O P 

任何幫助,將不勝感激。

回答

-1

你之後產生一個隨機數只有一次,在這裏int number = (int) (Math.random() * 26) + 65;

,你循環並插入相同數量將2D陣列上的每個位置。如果int number = (int) (Math.random() * 26) + 65;裏面的循環,你會得到一個隨機數每次迭代,這樣,你會(理性)不同的數字。

因此,只要改變

public static void box(){ 
int rows = 10; 
int columns = 10; 
int number = (int) (Math.random() * 26) + 65; // move this into loop 
char[][] table = new char [rows][columns]; 
for (int r = 0; r < rows; r++){ 
    for (int c = 0; c < columns; c++){ 
     table[r][c] = (char) number; 
     System.out.print(table[r][c] + " "); 
    }//inner for loop 
    System.out.println(); 
}//outer for loop 

public static void box(){ 
    int rows = 10; 
    int columns = 10; 

    char[][] table = new char [rows][columns]; 
    for (int r = 0; r < rows; r++){ 
     for (int c = 0; c < columns; c++){ 
      int number = (int) (Math.random() * 26) + 65; 
      table[r][c] = (char) number; 
      System.out.print(table[r][c] + " "); 
     }//inner for loop 
     System.out.println(); 
    }//outer for loop 

而且,你可以把兩行togather並刪除不需要number局部變量:

table[r][c] = (int) (Math.random() * 26) + 65; 

另一件事我會改變使用'A'而不是65.它在我看來更清晰...... table[r][c] = (int) (Math.random() * 26) + 'A';

+1

這個答案有什麼問題嗎?爲什麼它被拒絕投票? – calebeja9

1

只需推動這個

int number = (int) (Math.random() * 26) + 65; 

到之前

table[r][c] = (char) number; 

然後它會得到一個新的價值爲每個循環

2

帶上你number內循環。

char[][] table = new char [rows][columns]; 
for (int r = 0; r < rows; r++){ 
    for (int c = 0; c < columns; c++){ 
     int number = (int) (Math.random() * 26) + 65; //just move this line 
     table[r][c] = (char) number; 
     System.out.print(table[r][c] + " "); 
    }//inner for loop 
    System.out.println(); 
}//outer for loop 
0

您只能用臨時值生成一個字符(循環外部)。此外,我寧願'A'恆定65。像,

for (int r = 0; r < rows; r++){ 
    for (int c = 0; c < columns; c++){ 
     table[r][c] = (char) ('A' + (Math.random() * 26)); 
     System.out.print(table[r][c] + " "); 
    } 
}