有 Java 编程相关的问题?

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

java如何将int[]随机化?

我正在用Java制作一个游戏,需要随机排列棋盘的顺序。下面是我正在做的代码:

public static int[] RandomizeArray(int[] array){
    Random rgen = new Random();     

    for (int i=0; i<array.length; i++) {
        int randomPosition = rgen.nextInt(array.length);
        int temp = array[i];
        array[i] = array[randomPosition];
        array[randomPosition] = temp;
    }

    return array;
}

public void startNewGame(){
       numTries = 0;
       won = false;
       board = new int[4][4];

       RandomizeArray(board);
       for (int row = 0; row < 4; row++){

           for (int col = 0; col < 4; col++){

               board[row][col] = (row+1) + (4 * col);
           } 
       }


   repaint();
}

现在Java告诉我“int[]不能转换为int[][]”,但我不确定为什么。任何帮助都会很好


共 (2) 个答案

  1. # 1 楼答案

    您的错误是因为您试图传入2D数组而不是1D数组。例如,如果你说RandomizeArray(board[0]);,那将是一个有效的论点

    或者,您可以将RandomizeArray方法更改为:

    public static int[] RandomizeArray(int[][] array) {
       ...
    }
    

    注意我的论点中附加的[]。如果你走这条路,你需要修改你的随机逻辑

    此外,即使您成功地调用了RandomizeArray()方法,您也在重新排列空白值,然后在以后用新值填充它们,从而破坏了最初的目的

    以下是我解决这个问题的方法

    Collections类有一个内置的shuffle方法。让我们好好利用这一点。下面是一个完整的例子

    public void startNewGame() {
            int boardSize = 4;
            numTries = 0;
            won = false;
            board = new int[boardSize][boardSize];
            ArrayList<Integer> temp = new ArrayList();
    
            for (int row = 0; row < boardSize; row++) {
                    for (int col = 0; col < boardSize; col++) {
                            temp.add((row + 1) + (boardSize * col));
                    }        
            }
    
            Collections.shuffle(temp);
    
            for (int row = 0; row < boardSize; row++) {
                    for (int col = 0; col < boardSize; col++) {
                            board[row][col] = temp.get(row * boardSize + col);
                    }        
            }
    
            repaint();
    }
    
  2. # 2 楼答案

    board是二维的int[][],但RandomizeArray需要一维的int[]。您需要更改RandomizeArray以在二维中工作