user3224548
user3224548

Reputation: 9

C# Dice Times each number is rolled

I've created a Dice program which rolls a dice dependant on how many times the user wishes to roll. The problem I'm having is being able to calculate how many times each number appears.

Example. Roll Twice - Number is 5. Number is 4.

I want to be able to count that a 4 and a 5 has being rolled and display it back to the user.

My Code so far

using System;

namespace Dice
{
    class Dice
    {
        private Random randy;               
        int total;

        public static void Main()
        {
            Dice myDice = new Dice();       
            myDice.randy = new Random();    
            Console.Clear();                

            myDice.manyThrow();
            myDice.throwDice();
            Console.ReadKey();
        }

        //*******************************************************
        public void throwDice()
        {
            double count = 0;
            while(count != total)
            {
                count++;
                Console.WriteLine("Throw No " + count + " is " + oneThrow());    
            }
        }

        //*******************************************************
        public int oneThrow()
        {
            return randy.Next(6) + 1; // pick a number from 1 to 6 and return this
        }

        public int manyThrow()
        {
                Console.Write("How many times do you want to roll\t");
                total = Convert.ToInt32(Console.ReadLine());
                return total;
        }

        public void countEm()
        {
            // This is where I intend to place the code
        }    
    }
}

I've being trying to solve this for hours.

Upvotes: 1

Views: 4757

Answers (5)

Max
Max

Reputation: 13338

Modify the countEM like this:

public void countEm(int numberOfThrows)
{
      List<int> Throws = new List<int>(); //Create list, where value of throws will be stored.
      for(int i = 0; i < numberOfThrows) //Loop as many times as are given by parameter.
      {
          Throws.Add(OneThrow()); //Add return value of throw to the list.
      }
      //Show values in Throws list.
      foreach(var diceValue in Throws)
      {
           Console.WriteLine(string.Format("Value of throw: {0}", diceValue ));
      }
} 

coutEM should be called with the number of times you want to throw like:

countEM(5);

Above represents 5 throws. The result for example could be filled with:

1, 4, 6, 3, 4

Upvotes: 1

Adam Porad
Adam Porad

Reputation: 14471

If you just want to keep track of the count of each number rolled, then you add to your class an array of integers to store the count of each number rolled. The number of the dice roll could be the index into the array.

If you need to keep track of the order of the numbers rolled. Your class could could use a linked list or other ordered list to keep track of the numbers.

This sort of sounds like a homework assignment, so I'll leave the implementation details to the reader :)

Upvotes: 1

clcto
clcto

Reputation: 9648

Keep an array of the possible outcomes count.

class Dice
{
    private Random randy;               
    private int total;
    private static const int NUM_SIDES = 6;
    private int[] counts;

    public Dice()
    {
        randy = new Random();
        counts = new int[ NUM_SIDES ];
    }

    public static void Main()
    {
        Dice myDice = new Dice();
        Console.Clear();                

        int throws = myDice.manyThrow(); // need to save the number of throws
        myDice.throwDice( throws );
        countEm();
        Console.ReadKey();
    }

    public void throwDice( int throws )
    {
        double count = 0;
        while(count != throws)
        {
            count++;
            int result = oneThrow();
            counts[ result - 1 ]++; // NOTE: result-1 because arrays are 0-based.
            Console.WriteLine("Throw No " + count + " is " + oneThrow());    
        }
    }

    // ...

    public void countEm()
    {
        for( int i = 0; i < counts.Count; ++i )
            Console.WriteLine( (i+1) + " thrown " + counts[i] + " times." );
    }

Upvotes: 1

Brian Warshaw
Brian Warshaw

Reputation: 22984

Try this:

static int[] counts = new int[6];

And in oneThrow():

int result = randy.Next(6);
counts[result]++;
return result + 1;

Then in countEm():

for (int i = 0; i < counts.Length; i++)
{
    Console.WriteLine("{0}: {1}", i + 1, counts[i]);
}

Upvotes: 1

PashaPash
PashaPash

Reputation: 2056

Add an array to count roll results:

using System;

namespace Dice
{
    class Dice
    {
        private Random randy;
        int total;
        int [] rolls = new int[7];

        public static void Main()
        {
            Dice myDice = new Dice();
            myDice.randy = new Random();
            Console.Clear();

            myDice.manyThrow();
            myDice.throwDice();
            myDice.countEm();
            Console.ReadKey();

        }

        //*******************************************************
        public void throwDice()
        {
            double count = 0;
            while (count != total)
            {

                count++;
                Console.WriteLine("Throw No " + count + " is " + oneThrow());

            }
        }

        //*******************************************************
        public int oneThrow()
        {
            var result = randy.Next(6) + 1;        // pick a number from 1 to 6 and return this
            this.rolls[result]++;
            return result;

        }
        public int manyThrow()
        {

            Console.Write("How many times do you want to roll\t");
            total = Convert.ToInt32(Console.ReadLine());
            return total;

        }
        public void countEm()
        {
            for (int i = 1; i<7; i++)
            {
                Console.WriteLine("{0} rolled {1} times", i, rolls[i]);
            }
        }
    }
}

Upvotes: 2

Related Questions