Hi-Lo猜猜游戏程序java

设计并实现一个Hi-Lo猜猜游戏程序。程序从1到100中随机选择一个数,然后反复让用户猜该数字是什么直到对或用户退出为止。每猜一次都告诉用户猜测的结果是对还是过大或过小。使用一个标识值确定用户是否想退出。当用户猜对时报告其猜测的次数。每次游戏结束时询问用户是否想继续玩,直到用户选择结束。

为什么我玩完一次,虽然显示了问你是否继续的选择,但不能进行选择直接结束了,不能玩第二轮?

img


import java.util.*;
import java.util.Random;

public class hilo 
{
    public static void main(String[] args)
    {
        final int Max = 100;
        int answer, guess;
        String str, author = "y";;       
        Scanner scan = new Scanner(System. in);
        
            int count = 0;
            Random generator = new Random ();
            answer = generator.nextInt(Max) + 1;
            System.out.println("Start play (y/n)?: ");
            author = scan.nextLine();
            while(author.equalsIgnoreCase("y"))
            {
                System.out.print("Guess a number between 1 and" + Max + ".\nEnter your guess (0 to quit): ");
                guess = scan.nextInt();
                while(guess != 0)
                {
                       count++;
                    if(guess == answer )
                    {
                           System.out.println("Right! Guesses:" + count);
                        break;
                       }
                       else if(guess > answer )
                    {
                        System.out.println("Your guess was too big");
                        System.out.print("Enter your guess (0 to quit): ");
                        guess = scan.nextInt();
                    }
                    else
                    {
                        System.out.println("Your guess was too low");
                        System.out.print("Enter your guess (0 to quit): ");
                        guess = scan.nextInt();
                    }
                }
            
                if(guess == 0)
                {
                     System.out.println("游戏结束")    ;
              
                }
                System.out.println();
                System.out.println("Play again (y/n)?: ");
                author = scan.nextLine();
            }
            if(author.equalsIgnoreCase("n"))
            {
                System.out.println();
                System.out.println("游戏结束");
            }                               
    }
}

有两个问题:

  1. 比较用户输入的字符串时应该使用 equals() 方法而不是 ==,因为 == 比较的是对象引用而不是内容。这样会导致输入 y 时无法进入下一次循环。
  1. 在处理用户输入时要添加一个额外的 scan.nextLine(),以消耗掉上一次输入中的换行符。

修改后的代码如下:

import java.util.*;

public class HiLo {
    public static void main(String[] args) {
        final int Max = 100;
        int answer, guess;
        String author = "y";
        Scanner scan = new Scanner(System.in);

        while (author.equalsIgnoreCase("y")) {
            int count = 0;
            Random generator = new Random();
            answer = generator.nextInt(Max) + 1;
            while (true) {
                System.out.print("Guess a number between 1 and " + Max + " (0 to quit): ");
                guess = scan.nextInt();
                scan.nextLine(); // 消耗掉换行符
                if (guess == 0) {
                    System.out.println("Game over");
                    break;
                } else if (guess == answer) {
                    count++;
                    System.out.println("Right! Guesses: " + count);
                    break;
                } else if (guess > answer) {
                    count++;
                    System.out.println("Your guess was too big");
                } else {
                    count++;
                    System.out.println("Your guess was too low");
                }
            }
            System.out.print("Play again (y/n)? ");
            author = scan.nextLine();
        }
        System.out.println("Game over");
    }
}


你必须要无限循环,然后直到输入n就跳出循环,大概就是;
}


while (true) {
  if (xxxx.equals("n")) break