PrintWriter не работает должным образом (?) - PullRequest
0 голосов
/ 15 мая 2018

Итак, я написал следующий класс, чтобы сохранить текущее состояние шахматной игры, которую я пишу для финала APCS. Согласно всему, что я прочитал, это должно работать, но это не так. Максимум, что я получил для печати, это "ro00 \ n". Я пробовал несколько вариантов этого кода. Я определил запись как бинарный писатель как BoldWriter (нет правильного имени); Я пробовал с и без приливов. Но это самая удачная версия класса. Если кто-то видит что-то, что я пропустил, любая помощь очень ценится.

class SaveListener implements ActionListener {
        String temp;
        public void actionPerformed(ActionEvent e) {
            System.out.println(">saveInitiated");
       try {write = new PrintWriter(new OutputStreamWriter(
                  new FileOutputStream("Board.txt"), "utf-8"));
               /*write = new PrintWriter(new File("Board.txt"), "UTF-8");*/
            for (int y = 0; y < 8; y ++) {
                for (int x = 0; x < 8; x++) {
                    System.out.printf(">>y:%d,x:%d\n", y, x);
                    if (Board[y][x] != null) {
                        temp = Board[y][x].getType();
                        switch (temp) {
                            case "pawn":{write.print("pa");}
                            break;
                            case "rook": write.print("ro");
                            break;
                            case "knight": write.print("kn");
                            break;
                            case "bishop": write.print("bi");
                            break;
                            case "queen": write.print("qu");
                            break;
                            case "king": write.print("ki");
                        }
                        write.flush();
                        write.print(y);
                        write.flush();
                        write.print(x + "\n");
                        write.flush();
                    }
                    else write.print("nu\n");
                    write.close();
                }
            }
            } catch (FileNotFoundException e1) {System.out.println(">>FileNotFound!");} catch (UnsupportedEncodingException e1) {System.out.println(">>unsupportedEncodingException");}
            System.out.println(">saveConcluded");
        }
    }

У меня есть похожий блок сохранения в другой шахматной программе, который отлично работает.

if (save) {
            PrintWriter write = new PrintWriter("Board.txt", "UTF-8");
            for (int y = 0; y < board.length; y++) {
                for (int x = 0; x < board[y].length; x++) {
                    write.print(board[y][x] + " ");
                }
            }
            write.close();
            System.out.println("Saved");
            save = false;
        }

Кстати, текст, который я ожидаю увидеть в этом файле: «ro00 \ n kn01 \ n bi02 \ n ki03 \ n qu04 \ n bi05 \ n kn06 \ n ro07 \ n pa00 \ n pa01 \ n pa02 \ n n pa03 \ n pa04 \ n pa05 \ n pa06 \ n pa07 \ n nu \ n nu \ n nu \ n nu \ n nu \ n nu \ n nu \ n nu \ n nu \ n nu \ n nu \ n nu \ n nu \ n nu \ n nu \ n nu \ n nu \ n nu \ n nu \ n nu \ n nu \ n nu \ n nu \ n nu \ n nu \ n nu \ n nu \ n nu \ n nu \ n nu \ n nu \ n pa60 \ n pa61 \ n pa62 \ n pa63 \ n pa64 \ n pa65 \ n pa66 \ n pa67 \ n ro70 \ n kn71 \ n bi72 \ n ki73 \ n qu74 \ n bi75 \ n kn76 \ n ro77 \ ". (пробелы вставлены для удобства чтения)

1 Ответ

0 голосов
/ 15 мая 2018
}
else write.print("nu\n");
write.close();

Этот блок else не имеет фигурных скобок, поэтому он применяется только к следующему оператору, который является write.print("nu\n");. Затем писатель закрывается независимо от того, был ли квадрат на доске нулевым, поэтому больше ничего не пишется. Во всяком случае, нет причин закрывать писателя пораньше. Попробуйте это:

} else {
    write.print("nu\n");
    write.flush();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...