我正在制作一个图形数独求解器。目前,我有一块用户可以进入启动板配置的电路板。然后他们可以点击"解决"它将解决这个难题。要显示结果,方法" displayResults()"被称为:
void displayResult(int[][] boardArray) {
sudokuBoard.updateArray(boardArray);
sudokuPanel.repaint();
sudokuPanel.revalidate();
}
然后调用updateArray()方法:
void updateArray(int[][] boardArray) {
for(int i = 0; i < 9; i++) {
for(int j = 0; j < 9; j++) {
if(boardArray[i][j] == 0) sudokuArray[i][j] = "";
else sudokuArray[i][j] = Integer.toString(boardArray[i][j]);
squares[i][j].removeAll();
squares[i][j].add(new JLabel(sudokuArray[i][j], JLabel.CENTER));
squares[i][j].repaint();
squares[i][j].revalidate();
}
}
}
这适用于&#34;解决&#34;,显示结果。
我的程序中有一个菜单栏,其中包含&#34;打开&#34;项目。这是为了读取文本文件(具有初始板配置)并在板上显示内容。 我试过调用&#34; displayResult()&#34;读入文件后的方法(传入结果数组)。不幸的是,调用时网格中没有任何内容显示。奇怪的是,我尝试过单击求解,然后正确的结果会出现在网格中。
sudokuPanel // the panel in the main window that contains the grid
sudokuBoard // an object of a Board class that contains all of the board info
squares // a 9x9 array of JPanels, representing the grid
sudokuArray // an array of Strings, containing the up to date information about the board configuration
我遇到了与另一种方法类似的问题,但我猜它们是相关的。 read()方法是:
protected void read() {
StringBuilder sb = new StringBuilder();
FileNameExtensionFilter filter = new FileNameExtensionFilter("TEXT FILES", "txt", "text");
chooser = new JFileChooser();
chooser.setFileFilter(filter);
if(chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
try {
File file = chooser.getSelectedFile();
Scanner input = new Scanner(file);
while(input.hasNext()) {
sb.append(input.nextLine());
sb.append("\n");
}
input.close();
readInToArray(sb);
} catch(FileNotFoundException e) {
System.err.println("File does not exist");
}
}
else return;
}
readInToArray(),它调用displayResult():
private void readInToArray(StringBuilder sb) {
int[][] newArray = new int[9][9];
String[] lines = (sb.toString()).split("\n");
for(int i = 0; i < 9; i++) {
for(int j = 0; j < 9; j++) {
char c = lines[i].charAt(j);
newArray[i][j] = Character.getNumericValue(c);
}
}
if(!checkArray(newArray)) {
errorMessage("Incorrect configuration");
return;
}
displayResult(newArray);
}