2009-07-19 12 views
1

Zu meiner Überraschung in der folgenden Programm die Eclipse-Konsole nicht gedruckt, während in der Schleife. Es druckt nur: "start: finish". Wenn ich println stattdessen verwende, tut es. Von wenn ich den Kommentar entfernen, tut es auch. Überraschung: Wenn ich die Zeilen "start: finish" in der Konsole kopiere, enthält die Zwischenablage alle gedruckten Zahlen. Interessant zu wissen was ist die Ursache für dieses Verhalten?Debug mit System.out.print in einer Schleife (Eclipse)

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"); 
    } 
+0

Verhalten bestätigt. Seltsam, muss etwas mit dem Eclipse-Wrapped-Output-Stream zu tun haben. – akarnokd

+0

Welche Eclipse-Version verwendest du? Ich bin auf 3.4.1 und das Programm funktioniert für mich. – Silfverstrom

+0

Wenn funktioniert für mich. Muss ein seltsames Eclipse-Problem sein. Oder, wahrscheinlicher, du hast einen Fehler gemacht;) – amorfis

Antwort

0

Nun, Sie haben eine sehr, sehr lange Linie dort. Es ist also durchaus möglich, dass Sie die maximale Zeilenlänge überschritten haben, die die Eclipse-Konsole zuverlässig anzeigen kann. Der Inhalt wurde wahrscheinlich dort gedruckt (was durch die Tatsache bewiesen wird, dass er beim Kopieren und Einfügen in Ihrer Zwischenablage erschien), aber nicht gut wiedergegeben wird.

+0

am wahrscheinlichsten, weil es auf anderen Eclipse-Versionen zu funktionieren scheint, so wurde der Puffer "unsichtbar" gedruckt – Gerard

0

Println in Java oder print ("\ n") In C & C++, um den Puffer zu leeren und es zwingen, alles, was in einem Puffer zu drucken, aber bei der Verwendung Druck whitout jede \ n (neue Zeile) ist es nicht unbedingt Ausdruck der Puffer

0

Verhalten bestätigt. Seltsam, muss etwas mit dem Eclipse-Wrapped-Output-Stream zu tun haben. Eclipse 3.5 von mir. Vielleicht verwirft die interne Pufferung die Ausgabe, wenn sie nicht richtig gespült() oder zu breit für eine Zeile ist.

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()); 
    } 
} 

Es ist eine Konsoleneinstellungen Run/Debug:Console:console buffer size (characters) in Eclipse, die Sie bis zu 10^6 Zeichen als Konsolenpuffer verwenden. Deine erste Schleife überschreitet sie.

0

Versucht, dass auf meiner Eclipse 3.4/Mac OSx Es gut gedruckt, wenn die obere Grenze 1000 war, aber für 10000, die Anzeige abgeschnitten.

Verwenden Sie anstelle von System.out.print System.out.println; das ist für jede Zeile und es funktioniert gut für mich für 10000.