java控制台输出百分比进度条示例

下面我来详细讲解一下如何实现“java控制台输出百分比进度条示例”。

1. 实现思路

要实现进度条功能,我们可以通过在控制台输出一系列“=”符号来表示进度条的长度,然后再在其后输出当前进度百分比的方式来实现。具体实现步骤如下:

  1. 先确定进度条长度,即宽度为多少个字符,可以自己根据要求来设置。比如我们设置宽度为50,那么进度条长度就是50个字符。
  2. 每次更新进度时,计算当前进度百分比,然后将百分比转换为进度条中需要输出的“=”符号的数量,最后输出当前进度百分比和进度条。
  3. 需要注意的是,在输出进度条时,需要把当前行的内容清空掉,然后再输出更新后的内容。这可以通过Java的控制台光标移动或者输出特殊符号的方式来实现。

2. 代码示例

下面我们分别通过两个示例来说明该实现思路的具体实现方法。

示例一:简单进度条

public class ProgressBarDemo {

    public static void main(String[] args) {
        int total = 100; // 总进度
        for (int i = 0; i <= total; i++) {
            int percent = i * 100 / total; // 计算当前进度百分比
            String progress = getProgressBar(percent, 50); // 获取当前进度条
            System.out.print("\r" + progress + " " + percent + "%"); // 输出当前进度和进度条
            try {
                Thread.sleep(100); // 模拟耗时操作
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    private static String getProgressBar(int percent, int width) {
        int complete = percent * width / 100; // 计算已完成的进度条长度
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < complete; i++) {
            sb.append("="); // 添加已完成的进度条
        }
        for (int i = complete; i < width; i++) {
            sb.append(" "); // 添加未完成的进度条
        }
        return "[" + sb.toString() + "]";
    }
}

该示例中,我们实现了一个简单的进度条,进度条宽度为50。每次更新进度时,通过 getProgressBar() 方法来获取当前的进度条,然后在控制台输出当前进度和进度条。需要注意的是,在输出前需要先清空当前行的内容,这里我们使用了回车符 \r 来完成。

示例二:多线程进度条

public class ThreadProgressBarDemo {

    public static void main(String[] args) {
        ExecutorService threadPool = Executors.newFixedThreadPool(5); // 创建线程池
        int total = 100; // 总进度
        for (int i = 1; i <= total; i++) {
            final int progress = i;
            threadPool.execute(() -> {
                int percent = progress * 100 / total; // 计算当前进度百分比
                String progressBar = getProgressBar(percent, 50); // 获取当前进度条
                System.out.print("\r" + progressBar + " " + percent + "%"); // 输出当前进度和进度条
                try {
                    Thread.sleep(100); // 模拟耗时操作
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            });
        }
        threadPool.shutdown(); // 关闭线程池
    }

    private static String getProgressBar(int percent, int width) {
        int complete = percent * width / 100; // 计算已完成的进度条长度
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < complete; i++) {
            sb.append("="); // 添加已完成的进度条
        }
        for (int i = complete; i < width; i++) {
            sb.append(" "); // 添加未完成的进度条
        }
        return "[" + sb.toString() + "]";
    }
}

该示例是一个多线程进度条,在示例一的基础上加入了线程池和多线程的概念。我们启动了5个线程,每个线程更新进度后输出当前进度和进度条。需要注意的是,在多线程场景下,需要使用线程安全的方式来更新进度条,比如使用 AtomicInteger 来保存当前进度。并且需要合理地调整输出时间间隔,避免频繁刷新输出。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java控制台输出百分比进度条示例 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • MybatisPlus BaseMapper 中的方法全部 Invalid bound statement (not found Error处理)

    首先,要理解这个报错的原因。 这个报错通常出现在使用 MyBatis-Plus 的 BaseMapper 时,当我们在 Mapper.xml 文件中定义了某个方法,但是该方法在 BaseMapper 中并没有对应的方法,就会出现这个错误。 具体来说,就是因为我们在调用 Mapper 方法的时候,所使用的 ID 没有与 Mapper.xml 文件中定义的 SQ…

    Java 2023年5月19日
    00
  • Java垃圾回收之分代收集算法详解

    Java垃圾回收之分代收集算法详解 什么是垃圾回收? 垃圾回收是Java语言最为重要的特性之一,可以处理程序运行期间产生的,但又不再被程序使用的对象和数据,从而释放出空间供程序使用。垃圾回收的核心是通过扫描内存中的对象,判断哪些已经无法被程序访问,然后将这些对象释放。 分代收集算法 分代收集算法是垃圾收集算法中的一种,其核心思想是根据对象生命周期的不同,将J…

    Java 2023年5月19日
    00
  • springboot用户数据修改的详细实现

    SpringBoot用户数据修改的详细实现 在SpringBoot中,我们可以使用Spring Data JPA来实现用户数据的修改。以下是一个详细的实现攻略: 1. 添加依赖 在pom.xml文件中添加以下依赖: <dependency> <groupId>org.springframework.boot</groupId&g…

    Java 2023年5月15日
    00
  • Java-IO流实验

    Java-IO流实验攻略 实验目的 通过本实验,学生应该了解和掌握基本的Java IO流的使用方法,包括文件输入/输出流、字符输入/输出流、缓冲输入/输出流和对象输入/输出流等,同时也能够学会如何合理地使用IO流来处理文件读写操作。 实验环境 Java 8及以上版本 Eclipse等Java IDE软件 实验步骤 1. 创建文件 首先需要创建一个用于测试的文…

    Java 2023年5月26日
    00
  • json字符串对象转换代码实例

    下面是关于“json字符串对象转换代码实例”的完整攻略。 什么是JSON字符串对象转换? JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,具有易读性、易编写和易解析等特点。通过JSON字符串对象转换,可以将JSON字符串转换为JavaScript对象,也可以将JavaScript对象转换为JSON字符串,以方便数据…

    Java 2023年5月26日
    00
  • Java Web 实现QQ登录功能一个帐号同一时间只能一个人登录

    首先我们需要了解一下QQ登录的实现流程。 用户打开网站,点击QQ登录按钮。 网站向QQ开放平台发送授权请求,获取用户授权。 QQ开放平台返回用户授权凭证,包含用户唯一标识openid。 网站拿到授权凭证后,向QQ开放平台发送请求,获取用户信息。 网站将用户信息保存在数据库中,同时在用户登录时生成一个token,返回给用户。 用户在访问其他需要登录的页面时,将…

    Java 2023年6月16日
    00
  • Java8中 LocalDate和java.sql.Date的相互转换操作

    Java 8中提供了新的日期时间API,其中非常重要的一部分是LocalDate类。在某些情况下需要将LocalDate转换为java.sql.Date,或者将java.sql.Date转换为LocalDate。接下来,我们来详细讲解Java 8中LocalDate和java.sql.Date的相互转换操作。 1. 将LocalDate转换为java.sql…

    Java 2023年6月1日
    00
  • jsp隐藏关键敏感字段信息只显示前后字段的示例

    要想实现JSP页面中隐藏关键敏感字段信息只显示前后字段,可以采用以下两种方式: 1.使用Java正则表达式 在JSP页面中,可以使用Java的正则表达式函数来替换掉敏感字段中间的字符,从而实现隐藏的效果。示例代码如下所示: <% String sensitiveInfo = "123456789"; String pattern =…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部