1

我在创建随机数独网格时遇到问题。我尝试修改用于解决难题的递归模式。拼图本身是一个二维整数数组。这就是我所拥有的(顺便说一句,该方法不仅随机化第一行。我有一个随机化第一行的想法,然后决定做整个网格):

public boolean randomizeFirstRow(int row, int col){
    Random rGen = new Random();

    if(row == 9){
        return true;
    }
    else{
        boolean res;
        for(int ndx = rGen.nextInt() + 1; ndx <= 9;){

            //Input values into the boxes
            sGrid[row][col] = ndx;
            //Then test to see if the value is valid
            if(this.isRowValid(row, sGrid) && this.isColumnValid(col, sGrid) && this.isQuadrantValid(row, col, sGrid)){
                // grid valid, move to the next cell
                if(col + 1 < 9){
                    res = randomizeFirstRow(row, col+1);
                }

                else{
                    res = randomizeFirstRow( row+1, 0);
                }

                //If the value inputed is valid, restart loop
                if(res == true){
                    return true;
                }
            }
        }
    }

    //If no value can be put in, set value to 0 to prevent program counting to 9
    setGridValue(row, col, 0);
    //Return to previous method in stack
    return false;
}

这会导致 ArrayIndexOutOfBoundsException 异常高或低(+- 100,000)。我试图看看它在方法中的应用程度,它永远不会超出这条线:

if(this.isRowValid(row, sGrid) && this.isColumnValid(col, sGrid) && this.isQuadrantValid(row, col, sGrid))

我不明白数组索引如何变得如此之高。谁能帮我吗?

4

2 回答 2

3
 for(int ndx = rGen.nextInt() + 1; ndx <= 9;){

这看起来很腥。Random.nextInt()返回整数全范围内的随机整数,而不仅仅是从 0 到 9。

于 2011-01-13T02:49:54.753 回答
0

你会想要这个。

public int nextInt(int n) 返回: 一个伪随机、均匀分布的 int 值,介于 0(包括)和 n(不包括)之间。

于 2011-01-13T03:02:34.777 回答