Отладка с помощью System.out.print в цикле (Eclipse) - PullRequest
1 голос
/ 19 июля 2009

К моему удивлению, в следующей программе консоль Eclipse не печатает в цикле. Он печатает только: «начало: конец». Когда я использую println вместо этого. Когда я удаляю комментарий, он тоже. Сюрприз: когда я копирую строки «начало: конец» в консоли, буфер обмена содержит все напечатанные числа. Интересно узнать, что является причиной такого поведения?

public static void main(String[] args) {
        System.out.print("start: ");
        for (int i = 0; i < 10000; i++) {
            // if (i > 1000 && i < 1010)
                System.out.print(i + " ");
        }
        System.out.println("finish");
    }

Ответы [ 4 ]

0 голосов
/ 19 июля 2009

Пробовал, что на моем eclipse 3.4 / Mac OSx Он печатался хорошо, когда верхний предел был 1000, но для 10000 дисплей урезался.

Вместо System.out.print используйте System.out.println; это для каждой строки, и она прекрасно работает для меня на 10000.

0 голосов
/ 19 июля 2009

Ну, у вас там очень, очень длинная очередь. Таким образом, вполне возможно, что вы превысили максимальную длину строки, которую консоль Eclipse может надежно отображать. Содержимое, вероятно, там было напечатано (о чем свидетельствует тот факт, что оно появилось в вашем буфере обмена при копировании и вставке), но плохо отображается.

0 голосов
/ 19 июля 2009

Поведение подтверждено. Странно, должно быть что-то связанное с выходным потоком, завернутым в eclipse. Затмение 3.5 мной. Возможно, внутренняя буферизация выбрасывает выходные данные, если они неправильно очищены () или слишком широки для строки.

package tests;

import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;

public class EclipsePrint {
    public static void main(String[] args) {
        ByteArrayOutputStream bout = new ByteArrayOutputStream();
        PrintStream out = System.out;
        System.setOut(new PrintStream(new BufferedOutputStream(bout), true));
        System.out.print("start: ");
        for (int i = 0; i < 10000; i++) {
                // if (i > 1000 && i < 1010)
                        System.out.print(i + " ");
        }
        System.out.println("finish");
        out.println(bout.size());
        out.println(bout.toString());

        bout = new ByteArrayOutputStream();
        System.setOut(new PrintStream(new BufferedOutputStream(bout), true));
        System.out.print("start: ");
        for (int i = 0; i < 1000; i++) {
                // if (i > 1000 && i < 1010)
                        System.out.print(i + " ");
        }
        System.out.println("finish");
        out.println(bout.size());
        out.println(bout.toString());
    }
}

В eclipse есть настройки консоли на Run/Debug:Console:console buffer size (characters), что позволяет использовать до 10 ^ 6 символов в качестве буфера консоли. Ваш первый цикл превышает его.

0 голосов
/ 19 июля 2009

Println на Java или print ("\ n"). В C & C ++ очистите буфер и заставьте его печатать каждую вещь в буфере, но если использовать print без какой-либо \ n (новой строки), это не обязательно буфер печати

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...