Java 如何将字符串的数字乘以一个数字

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

我目前正在用Java编写一个进度条。我只想添加每10%的字符。最好的方法是什么?我希望每1%的价值输出。我试过一次。然而,它并不完全有效。加载程序*编号/编号、编号处出错。我不想把这些写在彼此下面,但都写在一行里

我怎样才能改进它

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在控制台中打印同一行的方法是打印回车字符。在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将条件ifi==number更改为ifi%10==0,但这只适用于所有10%,对吗?那么什么才是1%?不能用字符串乘以整数。我认为您试图实现的是System.out.printf[%s]\r\s%,loader,number;你能证实这一点吗?这正是我想要的,但是我希望所有的10%都有一个附加值。假设我在100%10站的末尾将条件ifi==number更改为ifi%10==0How
永远,那只会对所有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;