我想在循环中使用进度条进行测试运行,但是我的功能只在循环结束时向我显示完整的栏...
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 :(得分:0)
问题是你只需要调用System.out.print
方法就可以在一行中写下你的所有值,并反复覆盖现有的控制台输出字符串。
尝试使用类似的内容转到下一行:
System.out.print("]");
System.out.println();//inserts new line
或更简洁的版本:
System.out.print("]\n");//\n inserts new line
答案 1 :(得分:0)
要回答您的问题,对于IntelliJ控制台,无法简单地覆盖旧的进度条并输出新的进度条。在Windows命令行上(我假设是Unix系统),您可以使用和覆盖打印进度条,如下所示(使用System.out.print
和'\r'
作为您正在进行的操作)。同时使您的进度条更具可读性(允许您通过更改值MAX_PIPE_CHAR
来扩展和缩短:
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();
}
}
}
}
从命令行:
java Tester
您将获得覆盖自身的进度条(在Windows上测试)。