为什么我的方法在从不同的地方调用时表现不同?

时间:2016-05-04 00:30:41

标签: java jframe jpanel

我正在制作一个图形数独求解器。目前,我有一块用户可以进入启动板配置的电路板。然后他们可以点击"解决"它将解决这个难题。要显示结果,方法" 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);
}

0 个答案:

没有答案