Java的。如何在IDEA控制台中创建进度条?

时间:2016-04-05 15:33:36

标签: java intellij-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("]");

    }

2 个答案:

答案 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上测试)。