Java密码猜测初学者程序

Java密码猜测初学者程序,java,Java,这个Java程序应该要求用户输入一个最大值,然后生成一个介于1和该最大值之间的随机数。然后,用户猜测值是多少,直到他们得到正确的值为止。当用户不正确时,程序会告诉他们他们过高或过低,并增加猜测次数。如果用户正确,程序将显示猜测的总数,并询问用户是否愿意再次玩 我一直存在的问题是,有时,当我输入猜测时,程序跳过告诉我我过高、过低或正确,然后简单地问我是否愿意再次玩。我不明白为什么会发生这种情况,而且似乎是随机发生的 import java.util.Scanner; public class G

这个Java程序应该要求用户输入一个最大值,然后生成一个介于1和该最大值之间的随机数。然后,用户猜测值是多少,直到他们得到正确的值为止。当用户不正确时,程序会告诉他们他们过高或过低,并增加猜测次数。如果用户正确,程序将显示猜测的总数,并询问用户是否愿意再次玩

我一直存在的问题是,有时,当我输入猜测时,程序跳过告诉我我过高、过低或正确,然后简单地问我是否愿意再次玩。我不明白为什么会发生这种情况,而且似乎是随机发生的

import java.util.Scanner;

public class GuessNumber 
{


public static void main (String [] args)
{

    Scanner in = new Scanner (System.in); //create scanner object
    int maxNumber = 0; //declare variables
    int userGuess = 0;
    int totalGuesses = 0;
    int secretNumber = 0;
    String replay = "";

    System.out.println("Welcome to the Secret Number Generator!");

    do
    {
        System.out.println("Please input a maximum value for the secret number and press enter."); //prompt user to input a maximum value
        maxNumber = in.nextInt();

        secretNumber = (int) ((Math.random() * maxNumber) + 1); //generate the secret number

        System.out.println("A new secret number has been chosen!"
                + "\nWhat do you think it is? Input your guess and press enter."); //prompt user to input a guess
        userGuess = in.nextInt();

        while (userGuess < secretNumber) //while user's guess is less than the secret number
        {
            System.out.println("Sorry, that is too low! Please try again."); //prompt user to input another guess; increment total number of guesses by 1
            userGuess = in.nextInt();
            totalGuesses ++;
        }

        while (userGuess > secretNumber) //while user's guess is greater than the secret number
        {
            System.out.println("Sorry, that is too high! Please try again."); //prompt user to input another guess; increment total number of guesses by 1
            userGuess = in.nextInt();
            totalGuesses ++;
        }

        if (userGuess == secretNumber) //if user guesses correctly
        {
            System.out.println("Nice job! Your guess, " + secretNumber + " is correct!" //congratulate and display total number of guesses
                    + "\nTotal number of guesses: " + totalGuesses);
        }

        System.out.println("Would you like to play again? Please input \"Yes\" or \"No\" and press enter."); //ask user if they would like to play again
        replay = in.next();

        while (!replay.equalsIgnoreCase("Yes") && !replay.equalsIgnoreCase("No") //in case of invalid input
                && !replay.equalsIgnoreCase("\"Yes\"") && !replay.equalsIgnoreCase("\"No\""))
        {
            System.out.println("Sorry, that is an invalid input. Please input \"Yes\" or \"No\" and press enter.");
            replay = in.next();
        }
    }   
    while(replay.equalsIgnoreCase("Yes") || replay.equalsIgnoreCase("\"Yes\"")); //replay while user says yes

    if (replay.equalsIgnoreCase("No") || replay.equalsIgnoreCase("\"No\"")) //if user says no
    {
        System.out.print("Thanks for playing!");
    }

} //end of main method


} //end of class GuessNumber
import java.util.Scanner;
公共类猜测数
{
公共静态void main(字符串[]args)
{
Scanner in=new Scanner(System.in);//创建Scanner对象
int maxNumber=0;//声明变量
int userGuess=0;
int totalGuesses=0;
int secretNumber=0;
字符串replay=“”;
System.out.println(“欢迎使用密码生成器!”);
做
{
System.out.println(“请输入密码的最大值,然后按enter。”);//提示用户输入最大值
maxNumber=in.nextInt();
secretNumber=(int)((Math.random()*maxNumber)+1);//生成密码
System.out.println(“已选择新的密码!”
+“\n您认为它是什么?输入您的猜测,然后按enter。”;//提示用户输入猜测
userGuess=in.nextInt();
while(userGuesssecretNumber)//while用户的猜测大于密码
{
System.out.println(“对不起,太高了!请重试”);//提示用户输入另一个猜测;将猜测总数增加1
userGuess=in.nextInt();
总体猜测++;
}
if(userGuess==secretNumber)//如果用户猜对了
{
System.out.println(“干得好!您的猜测,+secretNumber+”是正确的!”//祝贺并显示猜测总数
+“\n总猜测次数:”+总猜测次数);
}
System.out.println(“您想再次播放吗?请输入“是”或“否”,然后按enter。”);//询问用户是否想再次播放
replay=in.next();
而(!replay.equalsIgnoreCase(“是”)和&!replay.equalsIgnoreCase(“否”)//如果输入无效
&&!replay.equalsIgnoreCase(“\”是“)&&!replay.equalsIgnoreCase(“\”否“))
{
System.out.println(“对不起,这是一个无效的输入。请输入“是”或“否”,然后按enter键”);
replay=in.next();
}
}   
while(replay.equalsIgnoreCase(“Yes”)| replay.equalsIgnoreCase(“Yes”);//在用户说Yes时重播
if(replay.equalsIgnoreCase(“No”)| replay.equalsIgnoreCase(“No”)//如果用户说不
{
System.out.print(“感谢您的参与!”);
}
}//主方法结束
}//类结束猜测数

不要在单个评估条件下使用
循环。将三个内部while循环替换为以下内容(伪代码):

int guess=readInteger()
猜猜看!=数
如果猜测<数字打印“太低”
如果猜测>数字打印“过高”
断言猜测==数字
打印“你猜对了;干得好!”

然后在游戏循环中运行它,让游戏继续进行。

你有多个while循环,这没有意义。如果用户输入较大的数字,然后输入较小的数字,则将跳过该数字

你可以把它们缩小成一个

while (userGuess != secretNumber){
   if(userGuess > secretNumber){
     //too high
   } else if(userGuess < secretNumber){
     //too low 
   } else{
     //nice got it
   }

}

//do you want to play again 
...
while(userGuess!=secretNumber){
if(userGuess>secretNumber){
//太高
}else if(userGuess
看起来您遇到了一些循环问题,就像其他人建议的那样,当像“if-else”或“select-case”这样的简单选择结构起作用时,请避免太多不必要的嵌套循环。这样也可以省得你大惊小怪

为了让你的应用程序运行得更具可预测性,我建议将“游戏”逻辑加入到一个方法中。下面是一个运行的示例。希望它能帮你一些忙

import java.util.Scanner;

public class GuessNumber {

public static void main(String[] args) {

    Scanner in = new Scanner(System.in);
    String replay = "";

    do {
    runGame(); //run method to guess number
    System.out.println("Play again? Enter Yes or No");
    replay = in.nextLine().toLowerCase();
    }
    while(!replay.equals("no"));
}

private static void runGame() {
    Scanner in = new Scanner(System.in); //create scanner object
    int maxNumber = 0; //declare variables
    int userGuess = 0;
    int totalGuesses = 0;
    int secretNumber = 0;


    System.out.println("Welcome to the Secret Number Generator!");
    System.out.println("Please input a maximum value for the secret number and press enter."); //prompt user to input a maximum value
    maxNumber = in.nextInt();

    secretNumber = (int) ((Math.random() * maxNumber) + 1); //generate the secret number

    System.out.println("A new secret number has been chosen!" + "\nWhat do you think it is? Input your guess and press enter."); //prompt user to input a guess
    userGuess = in.nextInt();

    while (userGuess != secretNumber) {
        if (userGuess < secretNumber) {
            System.out.println("Sorry, that is too low! Please try again."); //prompt user to input another guess; increment total number of guesses by 1
        } else if (userGuess > secretNumber) {
            System.out.println("Sorry, that is too High! Please try again."); //prompt user to input another guess; increment total number of guesses by 1
        }
        else {
            System.out.println("Sorry, but that's not right. Try again...");
        }

        totalGuesses++;
        userGuess = in.nextInt();
    }
    System.out.println("You guessed it! After " + totalGuesses + "   tries.");
    }
}
import java.util.Scanner;
公共类猜测数{
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(系统输入);
字符串replay=“”;
做{
runGame();//运行方法猜测数字
System.out.println(“再次播放?输入是或否”);
replay=in.nextLine().toLowerCase();
}
而(!replay.equals(“no”));
}
私有静态void runGame(){
Scanner in=new Scanner(System.in);//创建Scanner对象
int maxNumber=0;//声明变量
int userGuess=0;
int totalGuesses=0;
int secretNumber=0;
System.out.println(“欢迎使用密码生成器!”);
System.out.println(“请输入密码的最大值,然后按enter。”);//提示用户输入最大值
maxNumber=in.nextInt();
secretNumber=(int)((Math.random()*maxNumber)+1);//生成密码
System.out.println(“选择了一个新的密码!”+“\n您认为它是什么?输入您的猜测,然后按enter键”);//提示用户输入猜测
userGuess=in.nextInt();
while(userGuess!=secretNumber){
if(userGuessimport java.util.Scanner;

public class GuessNumber {

public static void main(String[] args) {

    Scanner in = new Scanner(System.in);
    String replay = "";

    do {
    runGame(); //run method to guess number
    System.out.println("Play again? Enter Yes or No");
    replay = in.nextLine().toLowerCase();
    }
    while(!replay.equals("no"));
}

private static void runGame() {
    Scanner in = new Scanner(System.in); //create scanner object
    int maxNumber = 0; //declare variables
    int userGuess = 0;
    int totalGuesses = 0;
    int secretNumber = 0;


    System.out.println("Welcome to the Secret Number Generator!");
    System.out.println("Please input a maximum value for the secret number and press enter."); //prompt user to input a maximum value
    maxNumber = in.nextInt();

    secretNumber = (int) ((Math.random() * maxNumber) + 1); //generate the secret number

    System.out.println("A new secret number has been chosen!" + "\nWhat do you think it is? Input your guess and press enter."); //prompt user to input a guess
    userGuess = in.nextInt();

    while (userGuess != secretNumber) {
        if (userGuess < secretNumber) {
            System.out.println("Sorry, that is too low! Please try again."); //prompt user to input another guess; increment total number of guesses by 1
        } else if (userGuess > secretNumber) {
            System.out.println("Sorry, that is too High! Please try again."); //prompt user to input another guess; increment total number of guesses by 1
        }
        else {
            System.out.println("Sorry, but that's not right. Try again...");
        }

        totalGuesses++;
        userGuess = in.nextInt();
    }
    System.out.println("You guessed it! After " + totalGuesses + "   tries.");
    }
}