Логическая ошибка в том, как сузить числа для угадывания числовой программы - PullRequest
0 голосов
/ 21 декабря 2018

Я сейчас работаю над проектом «угадай число».Подсказка просит пользователя подумать о числе от 1 до 1000 (включая 1 и 1000). Моя проблема заключается в логике «более высоких» и «более низких» условных выражений.

Я уже пробовал так много комбинациймой код все еще не соответствует входному коду.Я вроде понимаю, почему, но я не могу объяснить, почему это не сужает мои цифры.

String text;
int min = 1;
int max = 1000;
int guess = 500;
int guess1, guess2;

while (!text.equals("yes")){
  System.out.println("Is your number " + (guess) + "?");
  System.out.println("yes,higher,or lower");
  text = reader.nextLine();
  if (text.equals("higher")){
    min = guess;
    guess1 = ((max - min+1)/2);
    guess = guess1 + min;
  }
  if (text.equals("lower")){
    min = guess;
    guess = (max - min)/2;
  }
}
}
}

В настоящее время я пытаюсь угадать 300. Это МОЙ ВЫХОД: Is your number 500? yes,higher,or lower lower Is your number 250? yes,higher,or lower higher Is your number 625? yes,higher,or lower lower Is your number 187? yes,higher,or lower higher Is your number 594? yes,higher,or lower lower Is your number 203? yes,higher,or lower ЗДЕСЬЖелаемый выход:

Is your number 500?
yes, higher, or lower
 lower
 Is your number 250?
 yes, higher, or lower
 higher
Is your number 375?
yes, higher, or lower
 lower
 Is your number 312?
 yes, higher, or lower
 lower
 Is your number 281?
 yes, higher, or lower
 higher
 Is your number 296?
 yes, higher, or lower
 higher
  Is your number 304?
  yes, higher, or lower
  lower
 Is your number 300?
 yes, higher, or lower
  yes

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Вы никогда не обновляете переменную max, но используете ее для вычисления значения догадки.Я бы порекомендовал, поступив так:

while (!text.equals("yes")) {
        System.out.println("Is your number " + (guess) + "?");
        System.out.println("yes,higher,or lower");
        text = reader.nextLine();

        if (text.equals("higher")) {
            min = guess;
        }
        if (text.equals("lower")) {
            max = guess;
        }
        guess = (max + min) / 2;
    }
0 голосов
/ 21 декабря 2018

Вы неправильно устанавливаете min и max.

В случае lower вы хотите установить max на guess - 1, так как вы удалили guess,Кроме того, установите для новых guess среднее значение max и min, добавляя их, не вычитая их.

В случае upper вам не нужна переменная guess1,Просто установите min на guess + 1, так как вы удалили guess, и снова установите guess на среднее значение max и min.

if (text.equals("higher")){
    min = guess + 1;
    guess = (max + min)/2;
}
if (text.equals("lower")){
    max = guess - 1;
    guess = (max + min)/2;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...