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

时间:2016-11-11 00:33:42

标签: java arrays loops if-statement random

我无法确定如何根据相应的数字(输出右侧的数字)显示圆形的星号数。

我试图用1个星号代表100个星号。然而,当我得到诸如#17卷的数字为417时,我希望它只打印4个星号,而不是5个;四舍五入。我尝试使用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

2 个答案:

答案 0 :(得分:2)

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

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]);

你循环数百次。这是不必要的,也是无益的。只需使用除法来获取要打印的* s的数量:

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循环的第一次迭代中,它会打印一个额外的&#34; *&#34;。< / p>

答案 1 :(得分:1)

将amountRoles [i]除以100并将其舍入。 当然,这不会为amountRoles [i]&lt; = 50打印任何星号,但我猜这是你想要的。

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