控制台打印进度条


引言

进度条是用户界面中常见的组件,尤其是在执行长时间操作时。虽然在控制台应用程序中没有图形用户界面那样的视觉组件,但我们可以使用字符来模拟进度条,为用户提供任务执行的视觉反馈。
执行开始…
当前进度: 0% [ ]
当前进度: 1% [ ]
当前进度: 2% [= ]
当前进度: 3% [= ]
当前进度: 4% [== ]
当前进度: 5% [== ]
当前进度: 6% [=== ]
当前进度: 7% [=== ]
当前进度: 8% [==== ]
当前进度: 9% [==== ]
当前进度: 10% [===== ]

当前进度: 100% [==================================================]
执行结束。

基础概念

在实现控制台进度条之前,需要了解几个Java编程的基础概念:

  • 控制台输出:使用System.out.println方法可以在控制台上打印信息。
  • 线程睡眠Thread.sleep(millis)方法可以暂停当前线程的执行,这在模拟耗时任务时很有用。
  • 字符串操作:使用字符串和StringBuilder类可以创建和修改字符串,这对于构建进度条的视觉表示非常重要。
实现步骤
  1. 定义进度条类:首先,我们创建一个ProgressBar类,该类负责进度条的显示逻辑。
/*** ProgressBar类用于表示进度条。*/
public class ProgressBar {private int total; // 总进度private int current; // 当前进度private int width; // 进度条宽度/*** ProgressBar类的构造方法。* @param total 总进度* @param width 进度条宽度*/public ProgressBar(int total, int width) {this.total = total;this.current = 0;this.width = width;}/*** 开始执行进度条。*/public void start() {System.out.println("执行开始...");}/*** 更新进度条进度。* @param value 新的进度值*/public void update(int value) {current = value;print();}/*** 结束执行进度条。*/public void finish() {update(total);System.out.println("执行结束。");}/*** 打印进度条。*/private void print() {double percentage = (double) current / total;int progressMarks = (int) (percentage * width);StringBuilder bar = new StringBuilder();bar.append(String.format("当前进度: %3d%% [", (int) (percentage * 100)));for (int i = 0; i < width; i++) {if (i < progressMarks) {bar.append("=");} else {bar.append(" ");}}bar.append("]");System.out.println(bar.toString());}
}
  1. 使用进度条:在需要展示进度的程序部分,创建ProgressBar对象,并在适当的时候更新它。
/*** ProgressBarDemo 类是一个演示进度条的类。*/
public class ProgressBarDemo {/*** main 方法是程序的入口方法。* @param args 命令行参数* @throws InterruptedException 如果线程被中断*/public static void main(String[] args) throws InterruptedException {int totalWork = 100; // 总工作量int barWidth = 50; // 进度条的宽度ProgressBar progressBar = new ProgressBar(totalWork, barWidth);progressBar.start(); // 启动进度条for (int i = 0; i < totalWork; i++) {progressBar.update(i); // 更新进度条Thread.sleep(100); // 模拟耗时操作}progressBar.finish(); // 完成进度条}
}

在这里插入图片描述

进阶改进

虽然上述实现已经能够满足基本需求,但还有一些额外的特性可以使进度条更加完善:

  • 可配置的进度条样式:允许用户自定义进度条的字符和样式。
  • 状态信息:在进度条旁边显示附加的状态信息,如已经耗费的时间、预计剩余时间等。
  • 异常处理:确保在程序异常或用户中断时,进度条能够正确地显示并结束。
结语

在这篇博文中,我们探讨了如何在Java中实现一个不在同一行覆盖的控制台进度条。这个进度条在每次更新时都会新起一行,避免了在同一行内覆盖的问题。通过实现这样的进度条,我们可以在控制台应用程序中提供更好的用户体验,并为长时间运行的任务提供直观的进度反馈。


希望这篇文章能够帮助你在Java项目中实现更好的控制台交互。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/468352.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安装 NVIDIA Chat with RTX

安装 NVIDIA Chat with RTX 0. NVIDIA Chat with RTX 是什么&#xff1f;1. 安装 NVIDIA Chat with RTX2. 使用 NVIDIA Chat with RTX3. NVIDIA Chat with RTX 下载地址 0. NVIDIA Chat with RTX 是什么&#xff1f; Chat With RTX 是一款演示应用程序&#xff0c;可让您个性化…

C语言-----用二维数组解决菱形的打印问题

1.打印菱形&#xff0c;多组输入&#xff0c;一个整数&#xff08;2~20&#xff09;&#xff0c;表示输出的行数&#xff0c;也表示组成“X”的反斜线和正斜线的长度。 #include <stdio.h>int main() {int n0;while(scanf("%d",&n)! EOF){int i0;int j0;f…

【JavaSE篇】——String的常用方法(全面知识覆盖)

目录 字符串常用方法 &#x1f388;字符串构造 &#x1f388;字符串长度(length) &#x1f388;字符串是否为空(empty) &#x1f388;String对象的比较 &#x1f308;比较是否引用同一个对象(boolean&#xff09; &#x1f308;boolean equals(Object anObject) 方法&#xff1…

【Python】Python代码的单元测试

Python代码的单元测试 单元测试的概念 定义&#xff1a;是指对软件中的最小可测试单元进行检查和验证。 作用&#xff1a;可以确保程序模块是否否和我们规范的输出&#xff0c;保证该模块经过修改后仍然是满足我们的需求。 单元测试的策略 如果要创建单元测试&#xff0c;…

java SSM新闻管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM新闻管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S…

Map和Set(哈希表)

目录 map&#xff1a; map说明&#xff1a; Map.Entry的说明&#xff1a;,v> Map 的常用方法: 演示&#xff1a; 注意&#xff1a; TreeMap和HashMap的区别 Set&#xff1a; 常见方法说明&#xff1a; 注意&#xff1a; TreeSet和HashSet的区别 哈希表: 冲突&a…

使用LORA微调RoBERTa

模型微调是指在一个已经训练好的模型的基础上&#xff0c;针对特定任务或者特定数据集进行再次训练以提高性能的过程。微调可以在使其适应特定任务时产生显着的结果。 RoBERTa&#xff08;Robustly optimized BERT approach&#xff09;是由Facebook AI提出的一种基于Transfor…

【王道数据结构】【chapter5树与二叉树】【P158t8】

设树B是一颗采用链式结构存储的二叉树&#xff0c;编写一个把树B种所有节点的左、右子树进行交换的函数。 #include <iostream> #include <stack> typedef struct treenode{char data;struct treenode *left;struct treenode *right; }treenode,*ptreenode;ptreeno…

docker磁盘不足!已解决~

目录 &#x1f35f;1.查看docker镜像目录 &#x1f9c2;2.停止docker服务 &#x1f953;3.创建新的目录 &#x1f32d;4.迁移目录 &#x1f37f;5.编辑迁移的目录 &#x1f95e;6.重新加载docker &#x1f354;7.检擦docker新目录 &#x1f373;8.删掉旧目录 1.查看doc…

Linux系统之部署File Browser文件管理系统

Linux系统之部署File Browser文件管理系统 一、File Browser介绍1.1 File Browser简介1.2 File Browser功能1.3 File Browser使用场景 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、检查本地环境3.1 检查本地操作系统版本3.2 检查系统内核版本 四、安装File Browser4…

11-OpenFeign-实现负载均衡策略

2021.0.1版本使用 spring-cloud-loadbalancer 1、默认开启负载均衡策略 使用default RoundRobinLoadBalancer策略 无需yaml文件配置&#xff0c;openfeignclient配置 RandomLoadBalancer &#xff1a;基于随机访问的负载均衡策略NacosLoadBalancer&#xff1a;基于Nacos权重…

Java:什么是向上转型与向下转型(详细图解)

目录 一、什么是向上转型 1、概念 2、代码示例 3、向上转型的优缺点 二、什么是向下转型 1、向下转型的概念 ​编辑 2、代码示例 三、向下转型的缺点及 instanceof 的使用 1、向下转型的缺点 2、instanceof的使用 一、什么是向上转型 1、概念 向上转型就是创建一个…