

進捗状況を数値でアウトプットしつつ作業を行いたく以下のように書きました。

[code]

    for (int iRun = 0; iRun <nRun; iRun++){
       double[] d = new double[10000];
       Arrays.fill(d, 1);
       if (100 < nRun && iRun % (nRun / 100) == 0)
          System.err.print("\rWorking " + Math.ceil(100.0 * iRun / nRun) + "%");
    }
    System.err.println("\rWorking " + Math.ceil(100.0 * iRun / nRun) + "%");
    System.err.println("fin");
    
[/code]

,  
こちらが想定しているコンソール上での最終状態です。（数値は変化しつつ100で止まる）

[code]

    Working 100.0%
    fin
    
[/code]

, しかしおおくの場合（5回に3、4回は）期待通りいかず、以下のようになります。

[code]

    Working 100.0%Working 100.0%
    fin
    
[/code]

.  
for終了後に `Thread::sleep`等を用いても改善は見られません。

[code]

    double[] d = new double[10000];
    Arrays.fill(d, 1);
    
[/code]

部は 本来の作業の部分を置き換えていますが、上記でも問題は発生しています。

`nRun=10000`において発生しております。`nRun`が小さいときは発生しない模様です。（私の環境下では）

恐らくコンパイラによる所だと思いますが、どうやって常に期待どおりの結果にすることができるでしょうか？  
実行環境は  
OS:CentOS 7.3  
Java: 1.8.0_121  
IntelliJ IDEA the Java IDE 2017.1 上での実行  
となっております。

＃  
皆様の回答から、IDE上での実行が原因である可能性が濃厚で、実際に他のターミナルからの実行では発生しませんでした。詳しい方には呆れられても仕方のない顛末ですが、気がつかせていただきありがとうございました。


CC BY-SA 3.0
2017-04-02T07:13:36.050
33711
2017-04-05T03:15:43.063
2017-04-05T03:15:43.063
10768
10768
question
java
Java System.err.printの制御