#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
это нечетное число. Результат будет усечен из-за деления, происходящего в целочисленной арифметике.