【问题标题】:Creating a histogram array创建直方图数组
【发布时间】:2015-02-10 15:03:48
【问题描述】:

所以我需要创建一个直方图,显示 4 个骰子掷出的总和的结果。该程序每次掷骰子时都会计算骰子的总数。我需要创建掷骰子循环中每个数字的频率的直方图。这是我的代码:

import java.util.Scanner;
import java.util.Random;
import java.util.Scanner;
import java.lang.Math;
public class DieSimulator
{
public static void main(String[] args)
{
  Die d1 = new Die(6);
  Die d2 = new Die(6);
  Die d3 = new Die(6);
  Die d4 = new Die(6);
  int roll = 100;


  int [] rolls = new int[roll];

     int four = 0;
     int five = 0;
     int six = 0;
     int seven = 0;
     int eight = 0;
     int nine = 0;
     int ten = 0;
     int eleven = 0;   
     int twelve = 0;
     int thirteen = 0;
     int fourteen = 0;
     int fifteen = 0;
     int sixteen = 0;
     int seventeen = 0;
     int eighteen = 0;
     int nineteen = 0;
     int twenty = 0;
     int twentyone = 0;
     int twentytwo = 0;
     int twentythree = 0;
     int twentyfour = 0;

  for (int i=0; i < rolls.length; i++)
{
     int n1 = d1.cast();
     //System.out.print(n1 + "");
     int n2 = d2.cast();
     //System.out.print(n2 + "");
     int n3 = d3.cast();
     //System.out.print(n3 + "");
     int n4 = d4.cast();

     int sum = n1 + n2 + n3 + n4;

     if (sum == 4)
         four++;
     if (sum == 5)
         five++;
     if (sum == 6)
         six++;
     if (sum == 7)
         seven++;
     if (sum == 8)
         eight++;
     if (sum == 9)
         nine++;
     if (sum == 10)
         ten++;
     if (sum == 11)
         eleven++;
     if (sum == 12)
         twelve++;
     if (sum == 13)
        thirteen++;
     if (sum == 14)
        fourteen++;
     if (sum == 15)
        fifteen++;
     if (sum == 16)
        sixteen++;
     if (sum == 17)
        seventeen++;
     if (sum == 18)
        eighteen++;
     if (sum == 19)
        nineteen++;
     if (sum == 20)
        twenty++;
     if (sum == 21)
        twentyone++;
     if (sum == 22)
        twentytwo++;
     if (sum == 23)
        twentythree++;
     if (sum == 24)
        twentyfour++;

     System.out.println("Total Dice roll: " + sum);
     System.out.println(twenty);
     }

     int[] histogram = new int[20];


     System.out.print(histogram);


   }


}

我使用什么代码来创建直方图?

【问题讨论】:

  • 4 到 24 个变量是什么?你不能在那里使用一个数组吗?
  • 这些是所有可能的骰子总和。有没有办法将这些变量包含在数组中。这正是我想要做的。

标签: java arrays histogram frequency


【解决方案1】:

补充 RobP 的答案,要获得直方图,请在 main 函数结束之前添加:

for(int i = 4; i < 24; i++) { 
    System.out.println("Result: " + i + " has got " + results[i] + " hit(s)");
}

我还注意到您没有访问 rolls 数组。您只需使用它的大小来限制 for 的迭代次数。

for (int i = 0; i < 100; i++) 

会做同样的事情...而不是在内存中分配数组。

【讨论】:

    【解决方案2】:

    改成这样的数组。可以使用 SparseArray,因为索引 0、1、2、3 从未使用过,但对我来说似乎不值得。我将数组设为 25 长 (24 + 1),以便 results[x] 保存 x 掷骰子的次数。

    import java.util.Scanner;
    import java.util.Random;
    import java.util.Scanner;
    import java.lang.Math;
    public class DieSimulator
    {
    public static void main(String[] args)
    {
      Die d1 = new Die(6);
      Die d2 = new Die(6);
      Die d3 = new Die(6);
      Die d4 = new Die(6);
      int roll = 100;
    
    
      int [] rolls = new int[roll];
      int [] results = new int[25];
    
    
      for (int i=0; i < rolls.length; i++)
    {
         int n1 = d1.cast();
         //System.out.print(n1 + "");
         int n2 = d2.cast();
         //System.out.print(n2 + "");
         int n3 = d3.cast();
         //System.out.print(n3 + "");
         int n4 = d4.cast();
    
         int sum = n1 + n2 + n3 + n4;
         results[sum]++;
    
         System.out.println("Total Dice roll: " + sum);
         }
    
         System.out.print(results);
       }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-09
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 2018-11-26
      • 1970-01-01
      • 2012-02-17
      • 2016-04-25
      相关资源
      最近更新 更多