Java System.err.printの制御
進捗状況を数値でアウトプットしつつ作業を行いたく以下のように書きました。
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");
,
こちらが想定しているコンソール上での最終状態です。(数値は変化しつつ100で止まる)
Working 100.0%
fin
, しかしおおくの場合(5回に3、4回は)期待通りいかず、以下のようになります。
Working 100.0%Working 100.0%
fin
.
for終了後に Thread::sleep
等を用いても改善は見られません。
double[] d = new double[10000];
Arrays.fill(d, 1);
部は 本来の作業の部分を置き換えていますが、上記でも問題は発生しています。
nRun=10000
において発生しております。nRun
が小さいときは発生しない模様です。(私の環境下では)
恐らくコンパイラによる所だと思いますが、どうやって常に期待どおりの結果にすることができるでしょうか?
実行環境は
OS:CentOS 7.3
Java: 1.8.0_121
IntelliJ IDEA the Java IDE 2017.1 上での実行
となっております。
#
皆様の回答から、IDE上での実行が原因である可能性が濃厚で、実際に他のターミナルからの実行では発生しませんでした。詳しい方には呆れられても仕方のない顛末ですが、気がつかせていただきありがとうございました。