2017-04-24 38 views
0

すべて大文字のアルファベットを含む2次元配列を作成すると仮定します。プログラムの目的は基本的に単語検索パズルを構築することです。ランダムなアルファベット文字で2次元配列を埋めたいのですが、私が現在持っているコードでは、テーブル配列はランダムに生成されたアルファベット1文字で完全に埋められます。ランダムな文字でランダムに配列を埋める方法はありますか?Javaの2次元配列にランダムなアルファベットを入れよう

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;の場合、ループはになります。反復するたびに乱数が得られ、そのようにすれば(理論上)異なる数になります。だから、

、ちょうどまた、あなたがテーマと連動の2行を入れて、numberローカル変数の必要性を取り除くことができ

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 

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 

を変更:

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

もう一つは私は65の代わりに 'A'を使用して変更したでしょう。それは私の意見でそれを明確にします... table[r][c] = (int) (Math.random() * 26) + 'A';

+1

この回答に問題はありますか?なぜそれが投票されたのですか? – calebeja9

1

ただ単に

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

前に、それはあなたのnumber内部ループを持参

2

各ループの新しい値を取得するために、この

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++){ 
     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

一時的な値で1文字(ループの外側)のみを生成します。また、私は65までの'A'を好むでしょう。同様に、

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] + " "); 
    } 
} 
関連する問題