2013-10-28 12 views
5

Ho un semplice programma aritmetico digitato in Eclipse. Quando si esegue il programma in Eclipse, l'output appare in ordine strano ogni volta che corro. A volte arriva l'eccezione all'ultima dichiarazione di stampa (che è la strada giusta). Alcune volte si tratta di viceversa in un ordine confuso. Perché sta accadendo & come correggerlo? C'è qualche impostazione per farla stampare nel modo giusto ogni volta che eseguo. Le schermate sottostanti mostrano come appare. Per favore aiutami a correggere questo problema.Ordine di stampa console in Eclipse

Corretto ordine: Ordine Correct Order when run

non corretto quando si corre un paio di volte dopo Incorrect Order

package com; 

    public class Abc { 

     /** 
     * @param args 
     */ 
     public static void main(String[] args) { 

      System.out.println("begin main"); 
      // TODO Auto-generated method stub 
      int a = 10; 
      int b = 0; 
      int c = 0; 


      System.out.println("value of a BD is " + a); 
      System.out.println("value of b BD is " + b); 
      System.out.println("value of c BD is " + c); 

      c = a/b; //Arthmetic Exception 

      System.out.println("value of a AD is " + a); 
      System.out.println("value of b AD is " + b); 
      System.out.println("value of c AD is " + c); 



     } 

    } 

risposta

5

Un po 'più in dettaglio: l'uscita dalle vostre dichiarazioni di stampa sta per System.out. Tuttavia, i messaggi delle eccezioni vanno a System.err (vedere this). Questi due sono flussi di output separati in cui entrambi si trovano nello stesso posto: la tua console. Vengono bufferizzati e elaborati in modo indipendente. Nella seconda situazione visualizzata, le istruzioni print vengono caricate temporaneamente ma non vengono ancora stampate quando si verifica l'eccezione.

modifica C'è una complicazione aggiunta qui, che è che la console Eclipse non è una vera console di Windows. Come notato nello here, ci sono stati problemi in passato con la console Eclipse su piattaforme Windows perché Windows non offre a Eclipse un buon modo per far sì che la console si comporti come una console nativa. Se si aggiungono le chiamate flush e si verificano ancora problemi, provare a eseguire il programma da un prompt dei comandi e vedere se ciò fa la differenza.

+0

Nota a margine, non correlata alla risposta: Se si desidera aggiungere collegamenti in forma '[descrizione] (collegamento)', non dimenticare il protocollo come 'http:// 'nel collegamento. O meglio basta usare l'opzione 'Ctrl + L'. Questo aggiungerà 'http: //' parte al tuo link e renderà la tua risposta più facile da modificare in seguito. – Pshemo

10

due diversi flussi vengono utilizzati qui. Si utilizza System.out. e l'eccezione viene stampata con System.err. Sono bufferizzati, quindi l'output può essere stampato prima dell'altro.

È possibile chiamare System.out.flush(); prima della linea di eccezione:

System.out.flush(); 
c = a/b; //Arthmetic Exception 
+1

+1. Un altro approccio sarebbe quello di impostare il flusso di errori sul flusso di output come 'System.setErr (System.out);' In questo modo solo un flusso dovrà utilizzare la console. – Pshemo

+0

Sfortunatamente questo non risolve il problema in modo affidabile ... –