-1

这个问题是针对 Java 的。我继续尝试创建一个大小为 N 的 Block[][],其中随机放置数字 0 - 9。我创建了一个数组,然后将其洗牌以防止数字重复。当我遍历数组并将数字分配给二维数组时,我不断发现二维数组中的所有数字都是相同的。该块不断出现:

222

222

222

非常感谢您的帮助!

public class Board {

int N = 3; 
static int [][] copy; 

//construct a board from an N-by-N array of blocks 
//(where blocks[i][j] = block in row i, column j) 
public Board(int[][] blocks){
    blocks =  new int[N][N]; //creates array of size N
    //generates random numbers 0 inclusive to # exclusive 
    List<Integer> randomList = new ArrayList<>(); 
    for (int i = 0; i < blocks.length; i++){
        randomList.add(i); 
    }
    int randomNum = 0; 
    for (int i = 0; i < blocks.length; i++){
        randomNum = randomList.get(i); 
    }
    Collections.shuffle(randomList);
    for (int i = 0; i < blocks.length; i++){
        for (int j = 0; j < blocks[i].length; j++){
            blocks[i][j] = randomNum; 
        }
    }
    copy = blocks.clone(); 
}
4

4 回答 4

0
   int counter = 0;
   Collections.shuffle(randomList);
    for (int i = 0; i < blocks.length; i++){
        for (int j = 0; j < blocks[i].length; j++){
            blocks[i][j] = randomList.get(counter);
            counter++; 
        }
    }

您应该创建一个计数器,它将遍历原始数组列表的每个元素并分配给多维数组列表

也改变:

 for (int i = 0; i < 10; i++){
        randomList.add(i); 
    }

你说你想要 0-9 上面的循环会给你 0-9。您拥有的循环只会给您0-2。

于 2014-10-08T13:15:11.203 回答
0

您需要使用您正在设置的位置的随机列表中的值。除此之外,如果要插入 0-9 个值,则需要修改随机列表创建:

public Board(int[][] blocks){
    blocks =  new int[N][N]; //creates array of size N
    //generates random numbers 0 inclusive to # exclusive 
    List<Integer> randomList = new ArrayList<>();

    for (int i = 0; i < 10; i++){
        randomList.add(i); 
    }

    Collections.shuffle(randomList);
    for (int i = 0; i < blocks.length; i++){
        for (int j = 0; j < blocks[i].length; j++){
            blocks[i][j] = randomList.get(j); 
        }
        // Shuffle the list again to get different values for the next line
        Collections.shuffle(randomList);
    }
    copy = blocks.clone(); 
}
于 2014-10-08T13:20:41.150 回答
0

问题是您正在将值分配给randomNum您的所有单元格。此变量在您的第二个 -loop 之前定义,for并保留在该循环终止的最大值(在您的示例中为 value 2)。

您可能希望从您的值中添加一个值randomList,然后在i索引更改时重新调整它。

于 2014-10-08T13:14:19.673 回答
0

您选择随机数的代码根本没有随机性:

int randomNum = 0; 
for (int i = 0; i < blocks.length; i++){
    randomNum = randomList.get(i); 
}

之后您进行洗牌randomList,但随后不使用洗牌列表。

于 2014-10-08T13:14:22.330 回答