当前位置: 首页 > 知识库问答 >
问题:

Java:循环通过和基于舍入的打印

闽康安
2023-03-14

我很难弄清楚如何根据星号对应的计数(输出右边的数字)显示四舍五入的星号数。

我正在尝试使用1个星号表示100个星号。然而,当我得到一个数字如卷#17是417,我希望它只打印4星号,而不是五;围捕也一样。我尝试使用Math.round()但没有成功。

我真的很感激任何帮助。

我的代码

public class Histogram {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        int numRoles = 30000;
        int[] amountRoles = new int[19]; // amountRoles Holds the Array

        for (int i = 3; i < 7; i++) 
        amountRoles[i] = 0; // Set 0
        {
            for (int i = 0; i < numRoles; i++) 
            {
                int die1 = (int)(Math.random()*6+1);
                int die2 = (int)(Math.random()*6+1);
                int die3 = (int)(Math.random()*6+1);
                amountRoles[die1+die2+die3]++; // Increments
            }
            System.out.print("The die was rolled " + numRoles + " times, its six value's counts are:");
            for (int i = 3; i < 7; i++)
            {
                System.out.println(); // Line Holder
            }
        }
        for (int i = 3; i < amountRoles.length; i++) // Iterates through amountRoles
        {
            System.out.print("[" + i + "]" + "  ");
            for(int j = 0; j < amountRoles[i]; j++) // Loop through amountRoles[i]
            {
                if (Math.round(j) % 100 == 0)
                {
                    System.out.print("" + "*");
                }
            }
            System.out.println(" "  + amountRoles[i]);
        }
    }
}

我的输出:

[3]     ** 139
[4]     **** 389
[5]     ********* 826
[6]     ************** 1366
[7]     ********************* 2082
[8]     ****************************** 2973
[9]     *********************************** 3440
[10]    *************************************** 3859
[11]    ************************************** 3742
[12]    *********************************** 3482
[13]    ****************************** 2918
[14]    ******************** 1996
[15]    ************** 1341
[16]    ********* 865
[17]    ***** 417
[18]    ** 165

共有1个答案

龚志文
2023-03-14

下面是打印每一行的部分:

System.out.print("[" + i + "]" + "  ");
for(int j = 0; j < amountRoles[i]; j++) // Loop through amountRoles[i]
{
    if (Math.round(j) % 100 == 0)
    {
        System.out.print("" + "*");
    }
}
System.out.println(" "  + amountRoles[i]);

你循环了几百次。这是不必要的,也是无效的。只需使用除法获得要打印的*的数目:

System.out.print("[" + i + "]  ");
int starsToPrint = (int) Math.round((double) amountRoles[i] / 100.0);
for (int j = 0; j < starsToPrint; j++) {
    System.out.print("*");
}
System.out.println(" "  + amountRoles[i]);

仅供您参考,原始代码被破坏的原因是因为0%100==0,所以在内部for循环的第一次迭代中,它会打印一个额外的“*”。

 类似资料:
  • 问题内容: 为了在用户单击“清除按钮”时初始化a上的所有,我需要遍历(而不是将所有单个字段都设置为“”)。 我如何使用for-each循环来遍历s的搜索? 问题答案: 但是,如果您具有更深层嵌套的JTextField,则可以使用以下递归形式: 编辑: Tom Hawtin的 一个样本 -粗线 建议将在您的框架班级中列出: 并在初始化单个文本字段时,将它们添加到此列表中: 当用户单击清除按钮时,只需

  • 我试图根据Count和*天删除SQLite中的行。 而不是像这样编写多个SQL命令: 等等... 我试图找到一种方法来使用for循环,它增加计数和*天 我试过这个: 我得到了一个下。 我查了一下错误并更改了号码,看它是否能修复它,仍然是索引器。 结果表的示例数据如下所示:“从结果中选择*从Splunk导出的列:src_ip,‘min(_time)’,Count 我得到的脚本的概念是正确的吗?有什么

  • 阅读一些基于范围的循环示例,他们提出了两种主要方法1、2、3、4 或 好 当我们不需要更改项目时,IMO的示例建议使用第二个版本(按值)。为什么他们不建议引用的内容(至少我没有找到任何直接的建议): 不是更好吗?当它是一个

  • 大家好,我被一个问题困住了,想不出解决办法。我使用的是while循环,do while循环和for。我知道我的前两个while循环是正确的,我试图完成的是让我的do while循环和for语句打印出与我的第二个while循环相同的东西。 输入要打印的消息? 你好 输入要打印邮件的次数。输入1-20之间的值: 5 使用do-while循环输出... 第6.0行-你好 do-while循环中的时间..

  • 如何通过XML实现这一点:使用特定的src创建,并使其带有边框?

  • 需要一些专家的建议。首先,这里是我的代码: 我的问题是:当我输入一个用户号码如“3”时,提示我的代码只打印一个__当我希望它打印指定的号码。我无论如何也想不出来。 我是英语专业的,所以这不是我的强项:(形状应该是菱形的。)