problem with while loop
Angela Fife
Greenhorn
Posts: 1
posted 11 years ago
I am having issues with a program I wrote for a school project. The program works just fine the first time the user plays the game; but, after the user is prompted to play again, the program skips the part asking for input from the user about the digits he wants to hint at and goes straight into asking the user to input the sum of the remaining digits. Why?
If you have any advice on how to fix this it would be greatly apreciated.
/*
*GuessingGame.java
*
*Angela Fife
*
*The purpose of this program is to simulate a magical guessing game
*
*/
import java.util.Scanner;
import java.util.Random;
public class GuessingGame{
public static void main(String [] args){
Scanner scan = new Scanner(System.in);
Random gen = new Random();
int quotient;
int num = 0;//computer's randomly generated number based on the level of difficulty
int difficulty = 0;//player's choice of difficulty level of game
int sumNum = 0;//the sum of the digits of the randomly picked number
int randomDigit;//to help in the calculation of the sum of the digits of the number
int evenOrOdd;//helps in the determination of even or odd for calculation purposes
int transformedNum;//the random number transfored into a multiple of 9
int count = 0;
int digit=0;//players choice of a digit in the sum of the scrambled numbers
int sumHint = 0;//sum of the numbers the user hinted at during the game.
int remainingSum;//sum of the remaining numbers after the user identifies other numbers
int finalNum;
String playAgain = "y";
System.out.println("Welcome to my magical number guessing game!");
System.out.println();
do{
System.out.println();
System.out.println("Please choose the difficulty level of the game.");
System.out.println("1Easy (3 digits), 2Average (5 digits), or 3Hard"+
" (8 digits).");
System.out.print("Enter choice (1/2/3): ");
difficulty = scan.nextInt();
if (difficulty == 1){
num = gen.nextInt(899)+101;//random number with 3 digits
}
else
if (difficulty == 2){
//this generates a random number with 5 digits
num = gen.nextInt(89999)+10001;
}
else
if(difficulty == 3){
//this generates a random number with 8 digits
num = gen.nextInt(89999999)+10000001;
}
//this step finds the sum of the number
quotient = num;
while (quotient>0){
randomDigit=quotient%10;
sumNum += randomDigit;
quotient = quotient/10;
}
//this step determines if the number is even or odd
evenOrOdd = num%2;
if (evenOrOdd == 0){
transformedNum = num + 18  sumNum;
}
else
transformedNum = num + 8 * sumNum;
//the next group is a list of instructions for the user
System.out.println("The trick's number is: " + transformedNum);
System.out.println();
System.out.println("Please, scramble the number's digits to form as"+
" many numbers as you want.");
System.out.println("All the new numbers must contain the same digits"+
" as "+ transformedNum+".");
System.out.println("Now, add all these numbers up and circle a nonzero"+
" digit in the result." );
System.out.println();
//this step asks for the user to input some of the digits from the number that they calculated
if (transformedNum >= 100 && transformedNum < 10000){//for a 3 digit number
while (count<2 && digit != (1)){
System.out.println("Please, enter one of the remaining digits"+
" in any order you want");
System.out.print("You may enter a 1 to quit: ");
digit = scan.nextInt();
if (digit == 1){
sumHint += digit +1;//adds the hint digits together
count ++;
}
else
sumHint += digit;
count++;
}
}
else
if (transformedNum >= 10000 && transformedNum < 1000000){//for a 5 digit number
while (count<4 && digit != (1)){
System.out.println("Please, enter one of the remaining"+
" digits in any order you want.");
System.out.print("You may enter a 1 to quit: ");
digit = scan.nextInt();
if (digit == 1){
sumHint += digit +1;//adds the hint digits together
count ++;
}
else
sumHint += digit;
count++;
}
}
else
//for an 8 digit number
while (count<7 && digit != (1)){
System.out.println("Please, enter one of the remaining digits"+
" in any order you want.");
System.out.print("You may enter a 1 to quit: ");
digit = scan.nextInt();
if (digit == 1){
sumHint += digit +1;//adds the hint digits together
count ++;
}
else
sumHint += digit;
count++;
}
//this step asks for the sum of the remaining digits
System.out.println();
System.out.print("Please enter the sum of the remaining digits (not "+
"including your number and the one's you have already told me.) ");
remainingSum = scan.nextInt();
System.out.println();
//this step calculates the magic number
finalNum = (sumHint + remainingSum)%9;
if (finalNum == 0){
System.out.println("Your number is 9!");
}
else
System.out.println("Your number is " + (9finalNum) + "!");
System.out.println();
System.out.print("Would you like to play again? (y/n) ");
playAgain = scan.next();
}while (playAgain.equalsIgnoreCase("Y"));
}
}
If you have any advice on how to fix this it would be greatly apreciated.
/*
*GuessingGame.java
*
*Angela Fife
*
*The purpose of this program is to simulate a magical guessing game
*
*/
import java.util.Scanner;
import java.util.Random;
public class GuessingGame{
public static void main(String [] args){
Scanner scan = new Scanner(System.in);
Random gen = new Random();
int quotient;
int num = 0;//computer's randomly generated number based on the level of difficulty
int difficulty = 0;//player's choice of difficulty level of game
int sumNum = 0;//the sum of the digits of the randomly picked number
int randomDigit;//to help in the calculation of the sum of the digits of the number
int evenOrOdd;//helps in the determination of even or odd for calculation purposes
int transformedNum;//the random number transfored into a multiple of 9
int count = 0;
int digit=0;//players choice of a digit in the sum of the scrambled numbers
int sumHint = 0;//sum of the numbers the user hinted at during the game.
int remainingSum;//sum of the remaining numbers after the user identifies other numbers
int finalNum;
String playAgain = "y";
System.out.println("Welcome to my magical number guessing game!");
System.out.println();
do{
System.out.println();
System.out.println("Please choose the difficulty level of the game.");
System.out.println("1Easy (3 digits), 2Average (5 digits), or 3Hard"+
" (8 digits).");
System.out.print("Enter choice (1/2/3): ");
difficulty = scan.nextInt();
if (difficulty == 1){
num = gen.nextInt(899)+101;//random number with 3 digits
}
else
if (difficulty == 2){
//this generates a random number with 5 digits
num = gen.nextInt(89999)+10001;
}
else
if(difficulty == 3){
//this generates a random number with 8 digits
num = gen.nextInt(89999999)+10000001;
}
//this step finds the sum of the number
quotient = num;
while (quotient>0){
randomDigit=quotient%10;
sumNum += randomDigit;
quotient = quotient/10;
}
//this step determines if the number is even or odd
evenOrOdd = num%2;
if (evenOrOdd == 0){
transformedNum = num + 18  sumNum;
}
else
transformedNum = num + 8 * sumNum;
//the next group is a list of instructions for the user
System.out.println("The trick's number is: " + transformedNum);
System.out.println();
System.out.println("Please, scramble the number's digits to form as"+
" many numbers as you want.");
System.out.println("All the new numbers must contain the same digits"+
" as "+ transformedNum+".");
System.out.println("Now, add all these numbers up and circle a nonzero"+
" digit in the result." );
System.out.println();
//this step asks for the user to input some of the digits from the number that they calculated
if (transformedNum >= 100 && transformedNum < 10000){//for a 3 digit number
while (count<2 && digit != (1)){
System.out.println("Please, enter one of the remaining digits"+
" in any order you want");
System.out.print("You may enter a 1 to quit: ");
digit = scan.nextInt();
if (digit == 1){
sumHint += digit +1;//adds the hint digits together
count ++;
}
else
sumHint += digit;
count++;
}
}
else
if (transformedNum >= 10000 && transformedNum < 1000000){//for a 5 digit number
while (count<4 && digit != (1)){
System.out.println("Please, enter one of the remaining"+
" digits in any order you want.");
System.out.print("You may enter a 1 to quit: ");
digit = scan.nextInt();
if (digit == 1){
sumHint += digit +1;//adds the hint digits together
count ++;
}
else
sumHint += digit;
count++;
}
}
else
//for an 8 digit number
while (count<7 && digit != (1)){
System.out.println("Please, enter one of the remaining digits"+
" in any order you want.");
System.out.print("You may enter a 1 to quit: ");
digit = scan.nextInt();
if (digit == 1){
sumHint += digit +1;//adds the hint digits together
count ++;
}
else
sumHint += digit;
count++;
}
//this step asks for the sum of the remaining digits
System.out.println();
System.out.print("Please enter the sum of the remaining digits (not "+
"including your number and the one's you have already told me.) ");
remainingSum = scan.nextInt();
System.out.println();
//this step calculates the magic number
finalNum = (sumHint + remainingSum)%9;
if (finalNum == 0){
System.out.println("Your number is 9!");
}
else
System.out.println("Your number is " + (9finalNum) + "!");
System.out.println();
System.out.print("Would you like to play again? (y/n) ");
playAgain = scan.next();
}while (playAgain.equalsIgnoreCase("Y"));
}
}
posted 11 years ago
Hi,
Welcome to JavaRanch!
The program assumes that "count" is 0 when the user hasn't input any digits, but in fact this is only true the first time through the loop. On subsequent trips, the previous nonzero value of "count" is still there. You need to set count to 0 inside the big dowhile loop rather than outside.
There may be more variables like this, but that's the first one I found. I think you probably want to move the declarations of most (perhaps not all, but most) of the variables declared at the top of main inside the dowhile loop, so they're fresh each time through.
Welcome to JavaRanch!
The program assumes that "count" is 0 when the user hasn't input any digits, but in fact this is only true the first time through the loop. On subsequent trips, the previous nonzero value of "count" is still there. You need to set count to 0 inside the big dowhile loop rather than outside.
There may be more variables like this, but that's the first one I found. I think you probably want to move the declarations of most (perhaps not all, but most) of the variables declared at the top of main inside the dowhile loop, so they're fresh each time through.
Gravity is a harsh mistress. But this tiny ad is pretty easy to deal with:
the new thread boost feature: great for the advertiser and smooth for the coderanch user
https://coderanch.com/t/674455/ThreadBoostfeature
