2016-04-05 24 views
0

Ben döngülerinde ilerleme çubuğu ile benim deneme istiyorum, ama döngü bittiğinde benim işlevi yalnızca bana tam bar gösteriyor ...Java. IDEA konsolunda ilerleme çubuğu nasıl yapılır?

static void testProgress(int all, int now) 
    { 
     float num = (float) (now/(all*0.1); 
     int current = (int) (num/1); 
     int rest = 10 - current; 

     System.out.print("\r["); 
     for(int a=1;a<=current;a++) 
     { 
      System.out.print("|"); 
     } 
     for(int b=1;b<=rest;b++) 
     { 
      System.out.print(" "); 
     } 
     System.out.print("]"); 

    } 
+0

Ve "şimdi" ne artırıldığını biliyor muydunuz? Veya bu yöntem çağrıldığında mı? Ayrıca, tam olarak ne ile yapmaya çalışıyorsunuz? float num = (float) (şimdi/(a ll * 0.1); int current = (int) (num/1); 'Mantık hatası çığlığı. – SGM1

+0

Bu işlevi döngülerde kullanıyorum ve "şimdi" döngü adımı. Ve float num = (float) kullanıyorum (şimdi/(tümü * 0.1); int current = (int) ', ilerleme çubuğunun mevcut konumunu almak için mevcut döngünün konumunu kullanıyorum ve şu anki adımı atıyorum: –

+0

, neden şu anki 'int akım = (int) (((float) (şimdi * MAX_PIPE_CHAR))/all);'? Boru karakteri '' 'bilmediyse, 0.1 çok keyfi görünüyor. – SGM1

cevap

0

sorunuza cevap için, sadece eski üzerine yazmak için bir yolu yoktur IntelliJ konsol için ilerleme çubuğu ve yeni bir çıktı. Windows komut satırında (ve Unix sistemini kabul ediyorum), ilerleme çubuğunu aşağıdaki gibi yazabilir ve üzerine yazabilirsiniz (yaptığınız gibi System.out.print ve '\r' kullanarak). Komut satırından itibaren

public class Tester { 
    static void testProgress(int all, int now) { 
     final int MAX_PIPE_CHAR = 10; 
     float num = now * MAX_PIPE_CHAR * 1.01f; // 1.01f to account for any round off 
     int current = (int) (num/all); 
     int rest = MAX_PIPE_CHAR - current; 

     System.out.print("\r["); 
     for (int a = 1; a <= current; a++) { 
      System.out.print("|"); 
     } 
     for (int b = 1; b <= rest; b++) { 
      System.out.print(" "); 
     } 
     System.out.print("]"); 

    } 

    public static void main (String args[]){ 
     for (int i = 0; i <= 100; i++) { // to test, taken from Aleksandar (slight modification) 
      testProgress(100, i); 
      try { 
       Thread.sleep(30); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
    } 
} 

: Ayrıca ilerleme çubuğunun bir daha okunabilir bir sürümünü yapma (eğer genişletmek ve değerini MAX_PIPE_CHAR değiştirerek istediğiniz gibi kısaltmak sağlar

java Tester 

Sen almak Kendinin üzerine yazılan ilerleme çubuğu (Windows üzerinde test edilmiştir)

+0

'1.01f'yi' 1.001f' yapabilirsin. Asıl nokta, floatlar üzerinde çarpma/bölme ile uğraşırken, yuvarlama hatasıdır. – SGM1

0

sorun arayarak bir satırda tüm değerlerini yazma olmasıdır Sadece System.out.print yöntemini kullanın ve mevcut konsol çıkış dizesinin üzerine tekrar tekrar yazın.

System.out.print("]"); 
System.out.println();//inserts new line 

Ya da daha özlü versiyon:

deneyin sonraki satıra gitmek için böyle bir şey kullanmak

System.out.print("]\n");//\n inserts new line 
+0

Amacı, gerçek ilerleme çubuğu gibi görünmesini sağlamak için satırı yeniden yazmak için, ama sadece bana tam bar gösterir .... –

+0

sizin süreç anlamına gelir biter ve hızlı ol. Kodunuzu hata ayıklayıcıyla kontrol ettim - işlev her adımda doğru verileri yazdırıyor ancak IntelliJ konsolu size ** redrawn ** olan bir ilerleme çubuğu gösterecek kadar kontrol sağlıyorsa, – Cootri

+0

@ DmitryFeniks IDK üzerine yazılır. Bir Komut satırı olabilir, ancak işler karmaşıklaşabilir. – SGM1