File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
http://aspose.com/file-tools
The moose likes Beginning Java and the fly likes Dice probability program, using nested loops. Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Beginning Java
Bookmark "Dice probability program, using nested loops." Watch "Dice probability program, using nested loops." New topic
Author

Dice probability program, using nested loops.

Isaac Davis
Greenhorn

Joined: Oct 24, 2010
Posts: 15
One of my assignments requires that I make a program that will calculate dice probability using nested loops(no idea why nested loops would be used here). I've written it out, and I get no compiling errors, but when I actually run the program for some reason it won't stop asking for user input, any advice as to why it does this would be helpful. I think the problems inside the for loop because without it there is no repetitive issue. I think the for loop isn't taking the value of rolls and is actually asking for it, but I need that value in there.

Stephan van Hulst
Bartender

Joined: Sep 20, 2010
Posts: 3647
    
  16

First of all, start by making your program more clear by eliminating all the 'cases' you use. You can store your values in a simple array like this:

rolls[random -1]++;

This will *greatly* decrease the verbosity of your program, and make it more clear why it's doing what it does.
Isaac Davis
Greenhorn

Joined: Oct 24, 2010
Posts: 15
Stephan van Hulst wrote:First of all, start by making your program more clear by eliminating all the 'cases' you use. You can store your values in a simple array like this:

rolls[random -1]++;

This will *greatly* decrease the verbosity of your program, and make it more clear why it's doing what it does.


I can't use rolls to store my values, rolls needs to be a number put in by the user because it determines how many times a dice would be rolled. The only real use I have for it is to determine when the main for loop ends. Then I need compare each new random to 1-12, to determine how many times that number has been rolled. I sort of understand what you're getting at with rolls[random -1]++ but I'm not quite sure how to assign the array as you're trying to point out.

Anyways this is what I've worked out according to what I think you mean. Still get the same issue though. I think it's asking for a new rolls every time the for loop runs through, any idea how to fix that?

Stephan van Hulst
Bartender

Joined: Sep 20, 2010
Posts: 3647
    
  16

I apologize, I didn't notice you already had a variable with that name. I meant a new variable, which you have interpreted correctly.

Anyway, looking at your program, I don't see why it would keep asking for input. You should have an entirely different problem on your hand, namely that you're stuck in a permanent loop. Have a look at the exit condition of your nested for loop.

By the way, you can also eliminate a lot in your display code.

If I may give you a big hint, I think you are using the nested loop for the wrong purpose. Tell me, how many dice do you have?
Isaac Davis
Greenhorn

Joined: Oct 24, 2010
Posts: 15
Stephan van Hulst wrote:I apologize, I didn't notice you already had a variable with that name. I meant a new variable, which you have interpreted correctly.

Anyway, looking at your program, I don't see why it would keep asking for input. You should have an entirely different problem on your hand, namely that you're stuck in a permanent loop. Have a look at the exit condition of your nested for loop.

By the way, you can also eliminate a lot in your display code.

If I may give you a big hint, I think you are using the nested loop for the wrong purpose. Tell me, how many dice do you have?


That's the format the displays supposed to go in, according to the example given by my teacher. These are the assignment instructions, and I have to use nested loops because of the section I'm on, it's an Ap class that i take online. So it's mostly self learned.

1. Create a new project called 5.05 Random Dice in the Mod05
Assignments folder.
2. Create a class called DiceProbability in the newly created project
folder.
3. Ask the user to input how many times the dice will be rolled.
4. Calculate the probability of each combination of dice. (You may want to start with
more familiar six-sided dice.)
5. Print the results neatly in two columns (do not worry about excessive decimal places).
6. What is the effect on the percentages when the number of rolls is increased?
7. After the program works, you might want to make it more interesting and ask the user
to enter the number of sides on a die (singular for dice).
Stephan van Hulst
Bartender

Joined: Sep 20, 2010
Posts: 3647
    
  16

It doesn't say in the requirements you need a nested loop.

You can make your display code display the same stuff, except with less verbose code, in the same way you altered the rest of your program. "Two or more, use a for".
Isaac Davis
Greenhorn

Joined: Oct 24, 2010
Posts: 15
Stephan van Hulst wrote:It doesn't say in the requirements you need a nested loop.


It isn't very specific but it does say it in the grading rubric, and the assignment is going to be turned in as Assignment 5.05 nested loops. So I'm pretty sure it had to use nested loops, believe me if it was my choice I wouldn't use nested loops for this.
Christophe Verré
Sheriff

Joined: Nov 24, 2005
Posts: 14687
    
  16

Your biggest problem here is that you have an infinite loop. The inner loop's end condition will never be met.


[My Blog]
All roads lead to JavaRanch
Christophe Verré
Sheriff

Joined: Nov 24, 2005
Posts: 14687
    
  16

Personally, I would not assume anything about nested loops. But if you insist on using them, I can think of a place where nested loops may be used :

1. Ask the number of rolls
2. Make a new array which is the size of the number of rolls. Each element will contain the roll result
3. Roll the dice and store the result in the array
4. Loop through each dice face (by the way, the numbers of faces should be kept in a variable)
5. Loop through the array, and count the number of times the current face was rolled
6. Calculate the probability the current faced has been rolled
Jan Hoppmann
Ranch Hand

Joined: Jul 19, 2010
Posts: 145

Another problem you need to be aware of is that you're not calculating for two six-sided dice, but rather for a twelve-sided one. To calculate for two dice you shoud use nested loops, but for only one die (as you're doing here), one is enough.

It should do this:



This will calculate probabilities. Your program right now just rolls a d12 and this will, with enough rolls, come close to the probability, but will not show it.


Life is full of choices. Sometimes you make the good ones, and sometimes you have to kill all the witnesses.
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: Dice probability program, using nested loops.