2016-11-10 81 views
0

我想根据滚动骰子的次数(全部通过数组)打印星号。我在星号之前遇到了骰子面(i)印刷的问题。另外,我从零开始得到两个零,并且不知道它们来自哪里。 我会很感激的帮助。Java:数组星号打印的值

我的代码:

public class Histogram { 

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

     int numRoles = 100; 
     int[] amountRoles = new int[7]; // amountRoles Holds the array 

     for (int i = 1; i < 7; i++) 
     amountRoles[i] = 0; // Set 0 
     { 
      for (int i = 0; i < numRoles; i++) 
      { 
       int die1 = (int)(Math.random()*6+1); 
       amountRoles[die1]++; // Increments 
      } 
      System.out.println("The die was rolled " + numRoles + " times, its six value's counts are:"); 
      for (int i = 1; i < 7; i++) 
      { 
       System.out.print("Side " + i + " was rolled " + amountRoles[i]+ " times out of " + numRoles + "."); 
       // Prints each sides value (i) alongside with how many times it was rolled (amountRoles[i]). 
       System.out.println(); // Formatting Line 
      } 
     } 
     for (int i = 0; i < amountRoles.length; i++) // Iterates through amountRoles 
     { 
      for(int j = 0; j < amountRoles[i]; j++) // Loop through amountRoles[i] 
      { 
       System.out.print("" + "*"); 
      } 
      System.out.println(i + " " + amountRoles[i]); 
     } 
    } 
} 

我的输出:

The die was rolled 100 times, its six value's counts are: 
Side 1 was rolled 11 times out of 100. 
Side 2 was rolled 19 times out of 100. 
Side 3 was rolled 19 times out of 100. 
Side 4 was rolled 17 times out of 100. 
Side 5 was rolled 16 times out of 100. 
Side 6 was rolled 18 times out of 100. 
0 0 (Where are these zeroes coming from?) 
***********1 11 
*******************2 19 
*******************3 19 
*****************4 17 
****************5 16 
******************6 18 

一个例子输出我的目标为:

[1]  ******************* 19 
[2]  ************ 12 
[3]  ********************* 21 
[4]  ******************** 20 
[5]  ************* 13 
[6]  *************** 15 
+3

提示:为什么你需要一个大小为7的数组来保存6面骰子滚动特定结果的次数? – Paul

+1

根据@Paul评论,这是'0 0'来自哪里,你开始'i = 0',这没有价值,因此你得到'0 0' –

+1

我认为你的潜在挑战因为java中的数组是基于零的,但你有点像对待它们一样。换句话说,数组的第一个元素位于索引0处,因此您应该将索引处的索引值设置为1。另外,使用'System.out.print(“some string”);'后面紧跟'System.out .println();'有点笨重。取而代之,使用'System.out.println(“some string”);' – Taylor

回答

1

只回答你的问题我看到一个没有其他问题代码,您从int i = 0获得0 0。将其更改为int i = 1,不再有更多0 0

为了让您的值以您需要的方式打印,您只需在循环上方的*之前简单移动要打印的内容即可。在这种情况下,[i],并且每次滚动的金额低于*循环。代码如下。这应该能解决你所说的问题。

for (int i = 1; i < amountRoles.length; i++) // Iterates through amountRoles 
{ 
    System.out.print("[" + i + "]"); 
    for(int j = 0; j < amountRoles[i]; j++) // Loop through amountRoles[i] 
    { 
     System.out.print("" + "*"); 
    } 
    System.out.println(" " + amountRoles[i]); 
} 
2

你从零开始?

也为中线

System.out.println(); // Formatting Line 

以上可以被删除,只是增加LN以前的输出。

我也会使用一个变量来保持字符串的计数,然后追加它。

for (int i = 1; i < amountRoles.length; i++) // Iterates through amountRoles 
    { 
     String asterCount = ""; 
     for(int j = 0; j < amountRoles[i]; j++) // Loop through amountRoles[i] 
     { 
      asterCount += ("*"); 
     } 
     System.out.println("[" +i +"]"+ " "+ asterCount + " "+ amountRoles[i]); 
    } 
+0

我喜欢count变量的想法,但OP也可以在那里打印,因为count变量只用于print语句中,一个格式化首选项,与汇总数组相反,他只是使用'*'显示数组。 –