Java-игра в угадайку не может угадать нечетные числа за 10 догадок

#java #loops

#java #циклы

Вопрос:

Итак, для моего класса Java мы должны угадать, о каком числе думает пользователь, от 0 до 1024. Мы должны угадать число за 10 догадок. Я не могу получить нечетные числа за 10 догадок, я могу получить их только за 11. Это то, что у меня есть до сих пор:

импортируйте java.util.Сканер;

открытый класс guessing_game {

 public static void main(String[] args) {
    int high, low, middle;
     String input;
    int totalGuesses;
    high = 1024;
    low = 0;
    totalGuesses = 0;
    String name;

    System.out.println("What is your name?");
        Scanner scan = new Scanner(System.in);
        name = scan.nextLine();

        middle = low   (high - low) / 2;
    System.out.println("Is your number higher than "   middle   ", "   name   "? Please answer 'y' or 'n'. ");
    System.out.println("If I guess the number, either answer 'that is my number' or answer 'n'.");
        totalGuesses  ;
        Scanner sca = new Scanner(System.in);
        input = sca.nextLine();

        while (high - low != 1){
if (input.equals("y")){
            low = middle;
        middle = low   (high - low) / 2;
    System.out.println("Okay, let's try again.");
    System.out.println("Is your number higher than "   middle   ", "   name   "? ");
        input = sca.nextLine();
        totalGuesses  ;}
if (input.equals("that is my number")){
    System.out.println("Great! Your number is "   middle   ". ");
    break;}


else if (input.equals("n")){
            high = middle;
        middle = low   (high - low) / 2;
    System.out.println("Alright, I'll try again.");
    System.out.println("Is your number higher than "   middle   ", "   name    "? ");
        input = sca.nextLine();
        totalGuesses  ;}
if  (high - low == 1){
    System.out.println("Number is "   high);
    break;}
if (high - low == 2){
    System.out.println("Your number is "   high);
    break;}}

    System.out.println("This guessing game program used "   totalGuesses   " guesses.");
    sca.close();
    scan.close();

     }
  

И это p-код, который мой профессор дал мне в документе word, чтобы помочь:

импортируйте java.util.Сканер;

 Start of main method
    integer high,low,middle;
    String input;
    integer totalGuesses;
    high = 1024;
    low = 0;
    totalGuesses = 0;

    start infinite loop
        middle = low   (high - low)/2
        print "Is your number higher than "   middle   " ? (y/n)"
        increment totalGuesses by 1
        read from keyboard into input
        if input is “y”
            low = middle
            middle = low   (high - low)/2               
            if (high - low) == 1
                print "Your number is "   high
                exit the infinite loop

        else
            high = middle
            middle = low   (high - low)/2
            if (high - low) == 1
                print "Your number is "   low
                exit the infinite loop



    print "The program used "   totalGuesses   " guesses"

end of method
  

конец урока

Комментарии:

1. Вероятно, отладчик поможет вам лучше.

2. Я бы, вероятно, интерпретировал «Бесконечный цикл» как while(True) , кстати

Ответ №1:

middle = low (high - low) / 2; не будет правильно вычисляться, если high - low это нечетное число. Результат будет усечен из-за деления, происходящего в целочисленной арифметике.