2016-04-05 19 views
0

私はサイクルでプログレスバーと私のテスト実行をしたいが、サイクルが終わったとき、私の関数は私だけ本格的なバーを示しています...Java。 IDEAコンソールでプログレスバーを作成するには?

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

"今"がインクリメントされているか、このメソッドが呼び出されたときに知っていたのですか?また、float num =(float) (今/( 11 * 0.1)。 int current =(int)(num/1); 'それは論理エラーを叫んでいます。 – SGM1

+0

私はこの関数をサイクルで使用し、 "今"はサイクルのステップです。そして私は現在のステップとサイクルのleightを使ってプログレスバーの現在の位置を取得するために 'float num =(float)(now /(all * 0.1); int current =(int)'を使用しています) –

+0

Soなぜあなたが知っていない場合には '|'であるのですか?0.1は非常に恣意的なようです。 – SGM1

答えて

0

をあなたの質問に答えるために、単に古いものを上書きする方法はありませんプログレスバーを開き、新しいものをIntelliJコンソール用に出力します。 Windowsのコマンドライン(そして私はUnixシステムと仮定している)では、次のようにプログレスバーを表示して上書きすることができます(System.out.print'\r'を使用しています)。 コマンドラインから

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

:また、あなたの進行状況バーのより読みやすいバージョンを作る(あなたが広げる、および値MAX_PIPE_CHARを変更することで、あなたが好きなように短縮することができます

java Tester 

あなたが得ます(Windows上でテストされた)プログレスバー。

+0

'1.01f'を' 1.001f'にすることができます。ポイントは、浮動小数点に対する乗算/除算を扱うときの丸め誤差を説明することです。 – SGM1

0

問題は、あなたが呼び出すことにより、1行にすべての値を書き込むことですSystem.out.printメソッドのみを使用し、既存のコンソール出力文字列を何度も上書きします。

は、次の行に移動するには、このようなものを使用してみてください:

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

以上の簡潔なバージョン:

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

これは、行を書き直して実際の進行状況のバーに見えるようにすることを目標にしていますが、完全なバーだけを表示します.... –

+0

これは、終わり早い。私はあなたのコードをデバッガでチェックしました - 関数はすべてのステップで正しいデータを出力しますが、上書きされます – Cootri

+0

IntelliJコンソールは、** redrawn **のプログレスバーを表示するのに十分なコントロールを与えます。コマンドラインかもしれないが、物事は複雑になるかもしれない。 – SGM1