Flush() печатает дважды

У меня есть код, который печатает дополнительную новую строку, которая мне не нужна. Также, если я добавлю system.out.println(str), то эта строка будет напечатана дважды, чего я не понимаю.

Код

public void run() throws IOException
{
    boolean zeroEntered = false;
    int scenario = 1;

    //while a zero hasn't been entered
    while(!zeroEntered)
    {
        boolean stop = false;
        String input;
        int numTeams = rdr.nextInt();
        Teams teams = new Teams(numTeams);

        //if there are 0 teams, then stop
        //and set zeroEntered to true
        if(numTeams == 0)
        {
            stop = true;
            zeroEntered = true;
        }
        else
        {
            //else write the scenario number
            wtr.write("Scenario #" + scenario + "\n");
            wtr.flush();
            scenario++;
        }

        //for the number of teams entered index
        for(int index = 0; index < numTeams; index++)
        {
            int numPlayers = rdr.nextInt();

            //add the number pNum of players
            for(int pNum = 0; pNum < numPlayers; pNum++)
            {
                //adds the player scanned
                int player = rdr.nextInt();
                teams.addPlayer(player, index);
            }
        }

        AthleteQueue lunchLine = new AthleteQueue(teams);

        //while there is still entry, and stop hasn't been entered
        while(rdr.hasNextLine() && !stop)
        {
            input = rdr.next();
            //if enter , then enqueue the next read player
            if(input.equals("ENTER"))
            {
                lunchLine.enqueue(rdr.nextInt());
            }
            //else serve, enqueue and print
            else if(input.equals("SERVE"))
            {
                wtr.write(lunchLine.dequeue() + "\n");
                wtr.flush();
            }
            //stop if there is no entry
            else
            {
                stop = true;
            }
        }

        //two lines after? why?
        wtr.write("\n");
    }

    wtr.flush();
    System.out.println("WHY");
}

Этот метод находится в классе, который имеет переменную экземпляра Scanner rdr и Writer wtr. В данном случае были переданы bufferedReader и printWriter. Начальный код несколько неуместен. Я просто включил его на случай, если ошибка может быть там. В последних нескольких строках печатается дополнительная новая строка и дополнительная причина. Я считаю, что это из-за метода флеша. Может кто-нибудь объяснить, почему это происходит и как я могу это исправить. Я ценю помощь.


person John Doe    schedule 07.11.2014    source источник
comment
Ваша проблема не в методе flush(). Это просто заставляет вашу программу печатать содержимое буфера в файл, в котором должен писать ваш писатель. (также см. stackoverflow.com/questions/1742361/flush- in-java-io-filewriter)   -  person huidube    schedule 07.11.2014
comment
Я не знаю, что ты хочешь сделать. Не могли бы вы объяснить это?   -  person huidube    schedule 07.11.2014
comment
Если flush() действительно печатается дважды, а это не так, его удаление решит проблему, а это не так. Имеет ли это?   -  person user207421    schedule 07.11.2014
comment
Flush не печатает дважды, но выражение «почему» печатается дважды и печатается дополнительная новая строка, чего я не понимаю. Моя программа представляет собой некий пользовательский интерфейс, который просто принимает какие-то входные данные и что-то выводит. Все работает нормально до конца с дополнительными напечатанными строками.   -  person John Doe    schedule 07.11.2014


Ответы (1)


Я предполагаю, что это потому, что вы упомянули '\ n' в wtr.write(lunchLine.dequeue() + "\n"); внутри цикла, а также после повторного выхода из цикла вы пишете новую строку wtr.write("\n");, которая вызывает две новые строки - одну из последней итерации внутри цикла и другую from wtr.write("\n")

person Raj_89    schedule 07.11.2014
comment
это то, что я хочу. Он выводит строку из очереди и переходит к следующей строке. Тогда я хочу иметь еще одну новую строку. Но помимо этого печатается третья новая строка. Кроме того, sys.out (почему) происходит дважды, что, как я подозреваю, связано с тем, что мой писатель является печатником (System.out) - person John Doe; 07.11.2014