【发布时间】:2016-04-19 10:08:38
【问题描述】:
我想要完成的事情:
while(there are empty squares)
get a random number of the remaining numbers
if(the number hasn't been tried before)
if(it fits)
place it and remove from available
next square
if(all numbers have been tried)
forget it
move back a square and try a different number
这个循环在 availableNumbers = 64 处停止,有时是 37,有时是 81 等等。是什么阻止了它一路运行?为什么有时卡住有时回退?
while(availableNumbers.size()>0){
rand = rn.nextInt(availableNumbers.size());
number = availableNumbers.get(rand);
if(number != triedNumbers[y][x][number-1]){ // If the number hasn't been tried in this square
if(!checkConflict(number)){
squares[y][x].setText(""+number);
availableNumbers.remove(new Integer(number));
addedNumbers[y][x] = number;
triedNumbers[y][x][number-1] = number;
moveAhead();
}
}
if(Arrays.equals(triedNumbers[y][x],refArray)){ // If all numbers have been tried in that square
emptySquare(); // Forget all numbers tried in current square
moveBack();
}
}
emptySquare、moveBack、moveAhead 和 checkConflicts 都可以正常工作(根据我的测试)。这是他们的要点:https://gist.github.com/WQvist/ac4296fb3a86fdc3d713
编辑:我终于解决了。感谢所有的帮助。看我的回答。
【问题讨论】:
-
我不知道是不是这个问题,但是你为什么要把
number换成一个新的Integer呢? -
因为我想删除那个特定的数字,而不是索引。 availableNumbers 是所有将出现在棋盘上的数字的列表。
-
@guy 这是不正确的。由于集合在基于 0 的索引上工作,因此范围实际上是 0 到
availableNumbers.size()-1。 -
我不知道这是否是问题,但
random.nextInt是exclusive 的最高值,即如果availableNumbers.size()是9number将在0 - 8 的范围内。在@ 987654331@ 你使用[number-1]所以你缺少一列。 -
@CalvinP。我的错,谢谢。我编辑了评论。
标签: java recursion generator sudoku