Java 如何将字符串的数字乘以一个数字
我目前正在用Java编写一个进度条。我只想添加每10%的字符。最好的方法是什么?我希望每1%的价值输出。我试过一次。然而,它并不完全有效。加载程序*编号/编号、编号处出错。我不想把这些写在彼此下面,但都写在一行里 我怎样才能改进它Java 如何将字符串的数字乘以一个数字,java,Java,我目前正在用Java编写一个进度条。我只想添加每10%的字符。最好的方法是什么?我希望每1%的价值输出。我试过一次。然而,它并不完全有效。加载程序*编号/编号、编号处出错。我不想把这些写在彼此下面,但都写在一行里 我怎样才能改进它 String laoder = "#"; int rounds = 1000; // Could be 10000, 250000, 60000, ... // This is 1% int number = 1000 / 100; for(i
String laoder = "#";
int rounds = 1000; // Could be 10000, 250000, 60000, ...
// This is 1%
int number = 1000 / 100;
for(int i=0; i < 1000; i++){
// This is X %
if(i == number) {
// I want to print the # every 10 % and the normale percentage every 1%
// For example
// [# ] 1%
// [# ] 2%
// ....
// [## ] 10%
// [##########] Done
System.out.printf("[# %s ] \r \s%", loader * (number / number), number);
// This work, but how can I combine both
System.out.print(repeat(laoder , number / 10) + " \r");
number += number;
}
Thread.Sleep(500)
}
public static String repeat(int count, String with) {
return new String(new char[count]).replace("\0", with);
}
首先@sanjeevRm建议iff上的条件只在前10%进行评估,因此您必须将其更改为
if(i%number==0) {
...
}
对于字符串部分,我建议首先构建字符串,然后打印它,以便于操作
public String loadString(int hashCount, int maxHashCount) {
String loadString = "[";
//fill in the current loading percentage
for(int i=0; i<hashCount; i++)
loadString+="#";
//now fill in the remaining with white spaces
for(int k=0; k<(maxHashCount-hashCount); k++)
loadString+=" ";
loadString += "]";
return loadString;
}
SN:我不确定这是不是一个修正,但你写的数字是1%,这似乎不正确,因为你实际上是除以10,而不是除以100。此外,为了使其更具动态性,您应该将数字初始化为
number = rounds/10; //number is the 10% of the rounds keep in mind
首先@sanjeevRm建议iff上的条件只在前10%进行评估,因此您必须将其更改为
if(i%number==0) {
...
}
对于字符串部分,我建议首先构建字符串,然后打印它,以便于操作
public String loadString(int hashCount, int maxHashCount) {
String loadString = "[";
//fill in the current loading percentage
for(int i=0; i<hashCount; i++)
loadString+="#";
//now fill in the remaining with white spaces
for(int k=0; k<(maxHashCount-hashCount); k++)
loadString+=" ";
loadString += "]";
return loadString;
}
SN:我不确定这是不是一个修正,但你写的数字是1%,这似乎不正确,因为你实际上是除以10,而不是除以100。此外,为了使其更具动态性,您应该将数字初始化为
number = rounds/10; //number is the 10% of the rounds keep in mind
这显示了对其进行编码的一种方法。您可能需要根据自己的口味调整舍入位
public class TestProgress {
private static String getProgress(int current, int total) {
float status = (float)current/(float)total*100;
String bar = "";
while(bar.length()*10 < status) {
bar += "#";
}
while(bar.length()<10) {
bar += " ";
}
return String.format("%3.0f [%s]", status, bar);
}
public static void main(String[] args) {
for (int i=0;i<5000;i++) {
System.out.print(getProgress(i, 5000));
System.out.print("\r");
}
}
}
这显示了对其进行编码的一种方法。您可能需要根据自己的口味调整舍入位
public class TestProgress {
private static String getProgress(int current, int total) {
float status = (float)current/(float)total*100;
String bar = "";
while(bar.length()*10 < status) {
bar += "#";
}
while(bar.length()<10) {
bar += " ";
}
return String.format("%3.0f [%s]", status, bar);
}
public static void main(String[] args) {
for (int i=0;i<5000;i++) {
System.out.print(getProgress(i, 5000));
System.out.print("\r");
}
}
}
这确实是一个有趣的问题。下面是一种方法。所有的计算都是使用整数而不是浮点数来完成的 请注意,总数必须大于0 玩得开心
int total = 100; // must be greater than 0
char[] progressBar = new char[10];
Arrays.fill(progressBar, ' ');
for (int progress = 0; progress <= total; progress++) {
int percentage = progress * 100 / total;
Arrays.fill(progressBar, 0, percentage / 10, '#');
System.out.println("[" + String.valueOf(progressBar) + "] " + percentage + "%");
}
这确实是一个有趣的问题。下面是一种方法。所有的计算都是使用整数而不是浮点数来完成的 请注意,总数必须大于0 玩得开心
int total = 100; // must be greater than 0
char[] progressBar = new char[10];
Arrays.fill(progressBar, ' ');
for (int progress = 0; progress <= total; progress++) {
int percentage = progress * 100 / total;
Arrays.fill(progressBar, 0, percentage / 10, '#');
System.out.println("[" + String.valueOf(progressBar) + "] " + percentage + "%");
}
试试这个
System.out.printf("\r[%-10s] %d%%", repeat(percent / 10, "#"), percent);
试试这个
System.out.printf("\r[%-10s] %d%%", repeat(percent / 10, "#"), percent);
在控制台中打印同一行的方法是打印回车字符。在java代码中,这是使用以下代码完成的 System.out.print\r; 这只是将光标返回到行的开头 下面的代码实现了您的需求 它总是打印在同一行上。 它正确地打印进度条。 它在进度条后打印完成百分比。 当进度达到100%时打印完成。 整数轮=1000; int百分之一=轮/100; 整数百分之十=轮/10; 整数计数=0; 串进程; 对于int i=1;i=百分之一{ System.out.print\r; } 进度=[; 如果i%tenPercent==0{ 计数++; } 对于int j=0;j
永远,那只会对所有10%的人有用,对吗?那么什么才是1%?不能用字符串乘以整数。我认为您试图实现的是System.out.printf[%s]\r\s%,loader,number;你能证实这一点吗?这正是我想要的,但是我希望所有的10%都有一个附加值。说我已经100%站在那里了谢谢你的回答!只有这样我才能把它写进新的一行。但是我希望它总是在同一行中,您能告诉我如何将%符号添加到字符串中吗;括号里有空格吗?示例:[]9个空格一一替换。我将您的行更改为System.out.printgetProgressi,1000+\r;因此,所有内容都在同一行中,唯一的问题仍然是如何在其中获得%符号和带空格的[]方括号。例如,如果整数计数为5000,则指示器不再为100%,而是变高。您仍然可以使用printf而不是println,对于格式字符串,请查看API文档-它将引导您找到包含答案的文件。如果您的整数计数为5000,则必须在getProgress函数中传递5000作为总工时。我不认为酒吧会超过100%。谢谢你的回答!只有这样我才能把它写进新的一行。但是我希望它总是在同一行中,您能告诉我如何将%符号添加到字符串中吗;括号里有空格吗?示例:[]9个空格一一替换。我将您的行更改为System.out.printgetProgressi,1000+\r;因此,所有内容都在同一行中,唯一的问题仍然是如何在其中获得%符号和带空格的[]方括号。例如,如果整数计数为5000,则指示器不再为100%,而是变高。您仍然可以使用printf而不是println,对于格式字符串,请查看API文档-它将引导您找到包含答案的文件。如果您的整数计数为5000,则必须在getProgress函数中传递5000作为总工时。我不认为酒吧会超过100%。谢谢你的回答!我明白你的意思。我不知道达到1%的最佳方法。是否说轮数/100=1%?但是,我如何检查它是否为10%,20%,。。。。30%?在这一点上,你只需要做ifi%number*10==0;谢谢你的回答!我明白你的意思。我不知道达到1%的最佳方法。是否说轮数/100=1%?但是,我如何检查它是否为10%,20%,。。。。30%?在这一点上,你只需要做ifi%number*10==0;