繁体   English   中英

在Java中将随机字母放入二维数组中

[英]putting random alphabetical letters in 2 dimensional array in 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

任何帮助,将不胜感激。

将您的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

只是移动这个

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

到之前

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

那么它将为每个循环获取一个新值

您只能生成一个具有临时值的字符(循环之外)。 另外,我更喜欢'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] + " ");
    }
 }

您只生成一次随机数,这里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

另外,您可以将两行放在一起并消除对number局部变量的需要:

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

我会改变的另一件事是使用'A'而不是65。在我看来,这变得更清楚... table[r][c] = (int) (Math.random() * 26) + 'A';

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM