有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java随机填充2d数组

我正在使用Java开发5X5棋盘游戏(表示为String[][]),我正在寻找一种有效的方法,在棋盘上随机放置3个A、3个B、3个C、3个D

我曾考虑在while循环中使用嵌套for循环遍历每个插槽,并将字母随机分配到电路板上的“插槽”,但我想在电路板的一个通道中完成,如果有一种好方法可以在一个通道中随机放置电路板上的所有15个字母

有什么建议吗


共 (2) 个答案

  1. # 1 楼答案

    您可以使用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

  2. # 2 楼答案

    一种方法是:创建一个ArrayList<Character>或字符串,给它输入15个字母,在ArrayList上调用java.util.Collections.shuffle(...),然后迭代这个列表,将随机项放入数组中

    例如:

      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();
      }