1

少し奇妙な問題があります。

簡単な数独プログラムを書いています。この方法を除いて、すべてが完全に機能するようになりました。

public static void checkAnswerKey()
    {
        int rowCounter = 0;
        int columnCounter = 0;

        System.out.println("The answers that are correct are (F is incorrect): ");

        for (rowCounter = 0; rowCounter <= 8; rowCounter += 1)
        {
            for (columnCounter = 0; columnCounter <= 8; columnCounter += 1)
            {
                if (gui.userInputFormattedArray[rowCounter][columnCounter].getText() == io.puzzleAnswerArray[rowCounter][columnCounter].toString())
                {
                    gui.userInputFormattedArray[rowCounter][columnCounter].setBackground(gui.correctAnswer);
                    System.out.print(gui.userInputFormattedArray[rowCounter][columnCounter].getText() + " ");
                }
                else
                {
                    gui.userInputFormattedArray[rowCounter][columnCounter].setBackground(gui.incorrectAnswer);
                    System.out.print(gui.userInputFormattedArray[rowCounter][columnCounter].getText() + io.puzzleAnswerArray[rowCounter][columnCounter].toString() + " ");
                    //System.out.print("F" + " ");
                }
            }
            System.out.println();
        }

これは、game.javaファイルから取得されます。

現在、このメソッドは、ユーザー入力を内部回答と照合することになっています。それは何をしますか。しかし、すべてが正しくないことがわかります。

io.javaファイルとgui.javaファイルからの宣言/インスタンス化は次のとおりです。

public class gui extends JFrame implements ActionListener{

..。

    public static JFormattedTextField[][] userInputFormattedArray = new JFormattedTextField[9][9];
    //Create the container.
    public Container pane = getContentPane();
    //The font the game uses.
    public Font gameFont = new Font("Arial", Font.PLAIN, 30);
    //Correct and incorrect answer colors.
    static Color correctAnswer = new Color(100, 255, 100);
    static Color incorrectAnswer = new Color(255, 100, 100);

これらの2つのメソッドは、コンストラクターで起動されます。

public void showTextFields()
    {
        int rowCounter = 0;
        int columnCounter = 0;

        for (rowCounter = 0; rowCounter <= 8; rowCounter += 1)
        {
            for (columnCounter = 0; columnCounter <= 8; columnCounter += 1)
            {
                userInputFormattedArray[rowCounter][columnCounter] = new JFormattedTextField();
                pane.add(userInputFormattedArray[rowCounter][columnCounter]);
                userInputFormattedArray[rowCounter][columnCounter].setFont(gameFont);
                userInputFormattedArray[rowCounter][columnCounter].setHorizontalAlignment(JTextField.CENTER);
            }
        }
    }

    public void setTextFields()
    {
        String heldString;
        boolean notEditable = false;
        int rowCounter = 0;
        int columnCounter = 0;

        for (rowCounter = 0; rowCounter <= 8; rowCounter += 1)
        {
            for (columnCounter = 0; columnCounter <= 8; columnCounter += 1)
            {
                if (game.puzzleUserShownArray[rowCounter][columnCounter] != 0)
                {
                    heldString = game.puzzleUserShownArray[rowCounter][columnCounter].toString();
                    userInputFormattedArray[rowCounter][columnCounter].setText(heldString);
                    userInputFormattedArray[rowCounter][columnCounter].setEditable(notEditable);
                }
            }
        }
    }

そして、これが答えの出所です。

public static Integer[][] puzzleAnswerArray = new Integer[9][9];

public void getPuzzle() throws FileNotFoundException
    {
        Scanner puzzlesInFile = new Scanner(new FileReader("C:\\Users\\owner\\Desktop\\eclipse\\projects\\Sudoku\\Sudoku\\src\\puzzles.dat"));
        String searchParameter = "#puzzle" + intPuzzleSeed;
        int rowCounter = 0;
        int columnCounter = 0;

        //Prints the search parameter into the console, ensuring accuracy with the RNG.
        System.out.print(searchParameter);
        System.out.println();

        //
        puzzlesInFile.findWithinHorizon(searchParameter, 0);
        while (puzzlesInFile.hasNextInt())
        {
            for (rowCounter = 0; rowCounter <= 8; rowCounter += 1)
            {
                for (columnCounter = 0; columnCounter <= 8; columnCounter += 1)
                {
                    puzzleAnswerArray[rowCounter][columnCounter] = puzzlesInFile.nextInt();
                    System.out.print(puzzleAnswerArray[rowCounter][columnCounter].toString() + " ");
                }
                System.out.println();
            }
        }
        puzzlesInFile.close();
    }

これで十分な情報になることを願っています。明らかな何かが欠けていますか?ちなみに、完成したパズルからのコンソール出力は次のとおりです。

正解は次のとおりです(Fは正しくありません):11 22 33 44 55 66 77 88 99 44 55 66 77 88 99 11 22 33 77 88 99 11 22 33 44 55 66 22 33 44 55 66 77 88 99 11 55 66 77 88 99 11 22 33 44 88 99 11 22 33 44 55 66 77 33 44 55 66 77 88 99 11 22 66 77 88 99 11 22 33 44 55 99 11 22 33 44 55 66 77 88

GUIは次のとおりです。

---編集:評判が10未満であるため、GUIを投稿できません。そこに着いたらすぐに、GUIの.pngを投稿します。---

私の推測では、「文字列」は同じですが、何らかの理由で同じものとして認識されていません。さらにコードを表示する必要がある場合はお知らせください。ただし、すべてをカバーしたと思います。

4

1 に答える 1

1

==文字列の等価性チェックに使用しています。

if(gui.userInputFormattedArray[rowCounter][columnCounter].getText() == io.puzzleAnswerArray[rowCounter][columnCounter].toString()) {

.equals()代わりにメソッドを使用してください。そして、それは文字列だけでなく、あらゆる種類のオブジェクトに当てはまります。オブジェクトの場合、オブジェクト==のIDをチェックします。

試す:

if(gui.userInputFormattedArray[rowCounter][columnCounter].getText().equals(io.puzzleAnswerArray[rowCounter][columnCounter].toString())) {
于 2012-11-02T03:14:47.920 に答える