Создание массива гистограмм

Поэтому мне нужно создать гистограмму, показывающую результаты суммы бросков 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);


   }


}

Какой код я использую для создания гистограммы?


person Ibrewster    schedule 11.12.2014    source источник
comment
Что такое от 4 до 24 переменных? Не могли бы вы использовать массив там?   -  person nha    schedule 12.12.2014
comment
это все возможные суммы игральных костей. Есть ли способ включить эти переменные в массив. это действительно то, что я пытаюсь сделать.   -  person Ibrewster    schedule 12.12.2014


Ответы (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);
   }
}
person RobP    schedule 11.12.2014

В дополнение к ответу RobP, чтобы получить гистограмму, добавьте это перед концом основной функции:

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++) 

сделал бы то же самое... и не выделил бы массив в памяти.

person marctrem    schedule 12.12.2014