首页 > 其他分享 >控制台打印进度条

控制台打印进度条

时间:2023-08-08 18:35:12浏览次数:28  
标签:now 进度条 int 打印 param fillNum 控制台 total

控制台打印进度条,实时展示任务进度。话不多说,直接上代码,这是一个编写好的进度条打印工具类,拿来即用~

1.工具类

import java.util.Arrays;

/**
 * <h5>描述:打印进度条</h5>
 */
public class ToolProgressBar {
	
	// 进度条展示符号,可自定义
	private final static char BAR_CHAR = '|';
	
	public static void main(String[] args) throws InterruptedException {
		int total = 100;
		for (int i = 0; i < total; i++) {
			printBar(total, i + 1);
			Thread.sleep(200);
		}
	}

	/**
	 * 打印带百分比的进度条.
	 * 
	 * @param total 进度条的总长度
	 * @param now   当前进度数量
	 */
	public static void printBar(int total, int now) {
		// 参数校验
		check(total, now);
		// 计算百分比
		double percent = (now * 100.0) / total;
		// 计算进度条应该填充的格数(默认100格),四舍五入取整
		int fillNum = (int) Math.round(percent); // 四舍五入取整
		// 生成进度条字符串
		String bar = createBar(fillNum);
		// 输出进度条
		System.out.printf("\r当前进度 [%s] %.2f%%", bar, percent);
		if (total == now) {
			System.out.println("\r\n任务执行完毕!");
		}
	}

	/**
	 * 生成进度条,默认进度条长度为100.
	 * 
	 * @param fillNum 填充的进度数量
	 * @return 生成的进度条字符串
	 */
	private static String createBar(int fillNum) {
		return createBar(100, fillNum, BAR_CHAR);
	}

	/**
	 * 生成进度条.
	 * 
	 * @param total   进度条的总长度
	 * @param fillNum 填充的进度数量
	 * @param c       用于填充的字符
	 * @return 生成的进度条字符串
	 */
	public static String createBar(int total, int fillNum, char c) {
		char[] chars = new char[total];
		// 使用指定字符填充进度条的前 fillNum 个位置
		Arrays.fill(chars, 0, fillNum, c);
		// 使用空格填充进度条的剩余位置
		Arrays.fill(chars, fillNum, total, ' ');
		return new String(chars);
	}

	/**
	 * 检查传入的总长度和当前进度是否合法.
	 * 
	 * @param total 进度条的总长度
	 * @param now   当前进度数量
	 * @throws IllegalArgumentException 参数非法或不正确的异常
	 */
	private static void check(int total, int now) {
		if (total < now) {
			throw new IllegalArgumentException("总长度不能小于当前进度");
		} else if (total < 1) {
			throw new IllegalArgumentException("总长度不能小于1");
		} else if (now < 0) {
			throw new IllegalArgumentException("当前进度不能小于0");
		}
	}
}

2.效果

2.1 Eclipse控制台

Eclipse中无法从同一行覆盖显示,效果如下:

控制台打印进度条_java

控制台打印进度条_java_02

2.2 Idea控制台

可在同一行覆盖显示,效果如下:

控制台打印进度条_java_03

控制台打印进度条_java_04

控制台打印进度条_java_05

控制台打印进度条_java_06

控制台打印进度条_java_07

标签:now,进度条,int,打印,param,fillNum,控制台,total
From: https://blog.51cto.com/abcd/7011128

相关文章

  • libhv创建简单udp控制台测试程序
    client:#include<iostream>#include"hv/UdpClient.h"#pragmacomment(lib,"hv.lib")classclient{public: client() { cli=nullptr; } ~client() { SAFE_DELETE(cli); } intsend(conststd::string&msg) { returnc......
  • Linux打印服务-CUPS的安装、配置和使用
    原文:https://blog.csdn.net/limelove/article/details/121988838 CUPS(CommonUNIXPrintingSystem,即通用Unix打印系统)是苹果公司所有,一个打印集成服务。包括了前端接收打印命令的相关程序,后端控制打印机硬件的程序,中间则是打印驱动。首先来看看CUPS驱动打印机的方式。这里要......
  • RocketMQ Linux单机测试:简易快速部署指南及Dashboard控制台部署
    目录简介开始下载增加环境变量修改启动文件jvm大小修改rocketmq配置文件启动快速测试关闭Dashboard下载Dashboard已编译jar包网盘下载启动命令可能遇到的问题写在最后简介请注意,本博客仅供初期测试时快速部署之用,以节省时间避免不必要的问题。如需在生产环境部署,请参考其他可靠......
  • 剑指 Offer 32 - III. 从上到下打印二叉树 III(中等)
    题目:解法一:classSolution{public:voidtraversal(TreeNode*cur,vector<vector<int>>&result,intdepth){if(cur==nullptr)return;if(result.size()==depth)result.push_back(vector<int>());result[depth].pu......
  • 【JVM技术指南】「GC内存诊断-故障问题排查」一文教你如何打印及分析JVM的GC日志(实战
    当我们在开发Java应用程序时,JVM的GC(垃圾回收)是一个非常重要的话题。GC的作用是回收不再使用的内存,以便程序可以继续运行。在JVM中,GC的日志记录了GC的详细信息,包括GC的类型、时间、内存使用情况等。在本文中,我们将介绍JVMGC日志的格式、含义和分析方法。JVMGC日志格式JVMGC日志的......
  • 惠普7720打印机彩印打印颜色浅
    打印一份彩印图纸,发现黑色的那部分线条打印不出来,其他颜色也浅。输入web账号密码进去打印一份质量报告质量报告如下,很差一般是打印机头堵塞了,选择清洁打印头清洁完后会打印一份质量报告,如果质量报告可以,就不用再使用级别2清洗了自动打印的一份质量报告,质量报告显示还可以,就不进......
  • 构建跨平台的.NET Core控制台应用程序
    在本博客中,我们将介绍如何构建一个跨平台的.NETCore控制台应用程序。.NETCore是一个开源的跨平台框架,它可以在Windows、macOS和Linux等操作系统上运行。通过.NETCore,我们可以轻松地构建具有高度可移植性的应用程序。以下是步骤:步骤1:安装.NETCoreSDK首先,你需要安装.NETCoreSD......
  • python教程 入门学习笔记 第7天 打印字符串拼接数值 其它类型转布尔值bool 模拟用户键
    想打印字符串拼接数值例如张三666怎么做?print("张三"+str(666))#直接将数值666转换为字符串,不用赋值也可以3)其它类型转布尔值bool布尔转换规则:所有表示空意义的数据,将被转换成False,其它数据将被转换成Truea=7 #整型数值b="nihao" #字符串c=0 #空值print(boo......
  • 剑指 Offer 32 - I. 从上到下打印二叉树(中等)
    题目://考察BFS(广度优先搜索)classSolution{public:vector<int>levelOrder(TreeNode*root){if(root==nullptr)return{};//一定不要漏了排除空树的情况vector<int>result;deque<TreeNode*>que;//用一个队列,利......
  • 输入任意整数,直到输入-1,用插入法排序以5行形式打印输出
    intmain(){ inta[100]; inti=0;intj=0;intn=0;intk=0; scanf("%d",&a[n]); n=0; while(a[n]!=-1) { n++; scanf("%d",&a[n]); } printf("BeforeSort:\n"); for(i=0;i<n;i++) { printf("%d",a[i......