我正在编写一个数独板生成器。我想到使用哈希映射来确保数字不会在同一行/列中重复。键是一个字符串(“行”/“列”+行/列数)。填充/检查几行后,程序停止放置数字并无限期运行。我不确定我错过了什么。
如果我在 checkMap 方法中检查 list.size() (== 9),程序会正常完成,但有些数字是错误的。
班级板{
ArrayList<Integer> list;
Map<String, ArrayList<Integer>> map = new HashMap<>();
String key;
int value;
int[][] board = new int[9][9];
public Board() {
for (int row = 0; row < board.length; row++) {
for (int col = 0; col < board.length; col++) {
do {
value = (int) Math.floor(Math.random() * 9 + 1);
} while (!checkValue(row, col, value));
//board[row][col] = value;
}
}
}
boolean checkValue(int row, int col, int value) {
key = "row" + row;
if (!checkMap(key, value)) {
return false;
}
key = "col" + col;
if (!checkMap(key, value)) {
return false:
}
return true;
}
boolean checkMap(String key, int value) {
list = new ArrayList<>();
if (map.containsKey(key) {
list = map.get(key);
if (list.contains(value)) {
return false;
}
}
list.add(value);
map.put(key, list);
return true;
}
}