[英]JAVA number guessing game using methods: method for play again does not work properly
我是JAVA的新手,並編寫了一個程序來計算人類用戶在1到100之間選擇的數字。
該程序通過猜測上下限的中點以及用戶的響應程度更高或更低來運行,直到猜出正確的數字為止。 但是,當程序詢問您是否要再次播放時? (y / n):輸入的字符不正確。 無論輸入什么字符,程序都將再次運行,並且不會在輸入“ n”時終止。
任何幫助將不勝感激。 謝謝!
import java.util.Scanner;
public class NumberGuesser
{
public static void main(String[] args)
{
do
{
playOneGame();
}
while(shouldPlayAgain());
}
//method for complete guessing number game between 1 and 100
public static void playOneGame()
{
//initial lower range to 0 and upper range to 100
int lowerBound = 0;
int upperBound = 100;
//Display message for user to guess a nummber
System.out.println("Guess a number between 1 and 100.");
//declare variables for program's number guess and user's response if number is higher or lower
int guess;
char userResponse;
do //do while loop to make number guesses until correct number is found
{
//call method to guess midpoint number
guess = Midpoint(lowerBound,upperBound);
// call method to get response from user if number is high low or correct
userResponse = getUserResponseToGuess(guess);
//decision structure if-else statements to set new lower/upper bounds after every iteration
if (userResponse == 'h' || userResponse == 'H')
{
lowerBound = guess;
}else if (userResponse == 'l' || userResponse == 'L')
{
upperBound = guess;
}else if (userResponse == 'c' || userResponse == 'C')
{
shouldPlayAgain();
playOneGame();
}
}while(userResponse != 'c' || userResponse != 'C');
}
//method to ask and allow user if they would like to play the game again
public static boolean shouldPlayAgain()
{
//Prompt User if they would like to play again
System.out.print("Great! Would you like to play again? (y/n): ");
//Read in a character
Scanner input = new Scanner(System.in);
char value = input.next().charAt(0);
//if true return y char
return value == 'y' || value == 'Y';
}
//method to get response from user for computer to guess if number is high, low, or correct
public static char getUserResponseToGuess(int guess)
{
//char response = guess;
Scanner input = new Scanner(System.in);
//declare local variable for user's response
char response;
do
{
//print out message with guess number and take input of h/l/c
System.out.print("Is the number " + guess + "? (h/l/c): ");
//Read in character
response = input.next().charAt(0);
}while(response != 'h' && response != 'l' && response != 'c'); //display guess and get user input while input does not equal h/l/c
return response;
}
//method to find the midpoint from two integers. take smaller number if 2 to return with 2 integers
public static int Midpoint(int low, int high)
{
int midpoint; //midpoint is a local variable
midpoint = (high+low)/2; //compute midpoint between upper and lower bounds
return midpoint;
}
}
問題在這里:
}else if (userResponse == 'c' || userResponse == 'C')
{
shouldPlayAgain();
playOneGame();
}
您問玩家是否要再進行一輪,然后...對此不執行任何操作,無論如何都要進行另一輪。 嘗試這個:
{
if(shouldPlayAgain()){
playOneGame();
}
}
您可以不使用返回值而調用shouldPlayAgain()
。
if (shouldPlayAgain()){
playOneGame();
}
在編寫此代碼時,您正在迭代且沒有退出條件:
else if (userResponse == 'c' || userResponse == 'C')
{
shouldPlayAgain();
playOneGame();
}
你可以寫:
else if (userResponse == 'c' || userResponse == 'C') { break; }
然后將控件返回到主循環。
問候,
嘗試運行以下代碼。 我試圖調制您的代碼,其中包括條件改善和循環刪除。
package test;
import java.util.Scanner;
public class NumberGuesser
{
public static void main(String[] args)
{
/*Reduntant loop removal by codechef*/
// do
// {
playOneGame();
// }
// while(/*shouldPlayAgain()*/false);
}
//method for complete guessing number game between 1 and 100
public static void playOneGame()
{
//initial lower range to 0 and upper range to 100
int lowerBound = 0;
int upperBound = 100;
//Display message for user to guess a nummber
System.out.println("Guess a number between 1 and 100.");
//declare variables for program's number guess and user's response if number is higher or lower
int guess;
char userResponse;
boolean temp = true;
one :do //do while loop to make number guesses until correct number is found
{
//call method to guess midpoint number
guess = Midpoint(lowerBound,upperBound);
// call method to get response from user if number is high low or correct
userResponse = getUserResponseToGuess(guess);
//decision structure if-else statements to set new lower/upper bounds after every iteration
if (userResponse == 'h' || userResponse == 'H')
{
lowerBound = guess;
}else if (userResponse == 'l' || userResponse == 'L')
{
upperBound = guess;
}else if (userResponse == 'c' || userResponse == 'C')
{
/* Block restructured by codechef */
temp = shouldPlayAgain();
if(temp)
{
System.out.println("TEMP : "+temp);
//playOneGame();
continue one;
}else{
System.out.println("Breaking Loop");
break one;
}
}
/*condition restructured by codechef*/
}while((userResponse != 'c' || userResponse != 'C' )&& temp);
}
//method to ask and allow user if they would like to play the game again
public static boolean shouldPlayAgain()
{
//Prompt User if they would like to play again
System.out.print("Great! Would you like to play again? (y/n): ");
//Read in a character
Scanner input = new Scanner(System.in);
char value = input.next().charAt(0);
//if true return y char
/* statement restructured by codechef */
return (value=='y'||value=='Y')?true:false;
}
//method to get response from user for computer to guess if number is high, low, or correct
public static char getUserResponseToGuess(int guess)
{
//char response = guess;
Scanner input = new Scanner(System.in);
//declare local variable for user's response
char response;
/* Reduntant While loop removal by codechef*/
// do
// {
//print out message with guess number and take input of h/l/c
System.out.print("Is the number " + guess + "? (h/l/c): ");
//Read in character
response = input.next().charAt(0);
System.out.println("RESONSE : "+response);
// }while(response != 'h' && response != 'l' && response != 'c'); //display guess and get user input while input does not equal h/l/c
return response;
}
//method to find the midpoint from two integers. take smaller number if 2 to return with 2 integers
public static int Midpoint(int low, int high)
{
int midpoint; //midpoint is a local variable
midpoint = (high+low)/2; //compute midpoint between upper and lower bounds
return midpoint;
}
}
輸出: -
跑:
猜一個介於1到100之間的數字。
是50嗎? (h / l / c):l
回應:l
是25嗎? (h / l / c):c
響應:c
大! 您想再玩一次嗎? (y / n):y
TEMP:真
是25嗎? (h / l / c):c
響應:c
大! 您想再玩一次嗎? (y / n):n
斷環
對於更改,請閱讀添加的注釋。 希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.