我无法确定如何根据相应的数字(输出右侧的数字)显示圆形的星号数。
我试图用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
答案 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("" + "*");
}