繁体   English   中英

随机填充二维数组

[英]Randomly populating a 2d array

我正在使用Java并在5X5棋盘游戏(表示为String [] [])上工作,我正在寻找一种有效的方法来随机放置3“A”,3“B”,3“C”,3董事会上有“D”。

我想在while循环中使用嵌套for循环来遍历每个插槽,然后随机地将字母分配给板上的'slots',但是我希望可以在板的一次通过中执行它,如果有好的话在一次通过中随机将所有15个字母放在板上的方法。

有什么建议么?

一种方法:创建一个ArrayList<Character>或String,输入15个字母,在ArrayList上调用java.util.Collections.shuffle(...) ,然后遍历此List,将其随机项放入数组中。

例如,

  List<String> stringList = new ArrayList<String>();
  for (char c = 'A'; c <= 'E'; c++) {
     for (int i = 0; i < 3; i++) {
        stringList.add(String.valueOf(c));
     }
  }
  for (int i = 15; i < 25; i++) {
     stringList.add(null);
  }

  Collections.shuffle(stringList);
  String[][] gameBoard = new String[5][5];
  for (int i = 0; i < gameBoard.length; i++) {
     for (int j = 0; j < gameBoard[i].length; j++) {
        gameBoard[i][j] = stringList.get(i * gameBoard.length + j);
     }
  }

  // now test it
  for (int i = 0; i < gameBoard.length; i++) {
     for (int j = 0; j < gameBoard[i].length; j++) {
        System.out.printf("%-6s ", gameBoard[i][j]);
     }
     System.out.println();
  }

您可以使用ArrayList来存储字母(和空单元格,我使用点.所以您可以在输出中识别它),然后使用Collections.shuffle()ArrayList元素放在“随机”位置。 最后将每个字母分配给String[][]数组:

public static void main(String[] args)
{
    String[][] board = new String[5][5];
    List<String> letters = new ArrayList<>();

    // fill with letters
    for (int i = 0; i < 3; i++) {
        letters.add("A");
        letters.add("B");
        letters.add("C");
        letters.add("D");
        letters.add("E");
    }
    // fill with "empty"
    for (int i = 0; i < 10; i++) {
        letters.add(".");
    }

    Collections.shuffle(letters);

    for (int i = 0; i < board.length; i++) {
        for (int j = 0; j < board.length; j++) {
            board[i][j] = letters.get(i*board.length + j);
        }
    }

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

输出样本:

C B . . . 
A E . E A 
. A . D D 
C . . . D 
B C E . B 

注意:

操作i*board.length + j将生成后续数字0, 1, 2, 3, ... 24嵌套循环。

暂无
暂无

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

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