2016-08-27 2 views
0

Не могли бы вы помочь мне разобраться, почему утверждение в теле метода бесконечно замкнуто?Бесконечный цикл в теле метода

Я создал класс Guesser. Ввод берется у пользователя как целое число в методе main() и определяется ответ как целое число, определенное в методе main().

Сам метод предназначен для проверки угаданного параметра, введенного пользователем в соответствии с определенным ответом (который равен 5), и возвращает вывод на консоль либо «вы ошибаетесь ...», либо «Правильно!».

Итак, всякий раз, когда я вставляю 5, он работает хорошо с одной проблемой, похоже, что введенное значение передается методу дважды. И это создает проблему, так как всякий раз, когда я ввожу 4, результат корректно проверяется, а результат, сгенерированный в консоли, возвращает правый оператор, но затем значение передается и снова возвращается, возвращаясь, попадая в цикл, бесконечно возвращая тот же оператор.

Вот код:

import java.util.Scanner; 
//class begins here 
class Guesser { 
int answer1; 
int guess; 

//constructor 
Guesser(int ans, int gs) { 
    answer1 = ans; 
    guess = gs; 
} 

//Method starts here 
void method1() { 
//Do control statement comes here 
do { 
    System.out.println("Guess the number..."); 
    if(this.guess != this.answer1) { 
     System.out.print("Your guess is worng. You're too "); 
     if(this.guess < this.answer1) System.out.println("low"); 
     else System.out.println("high"); 
    } //end of if statement 
} while (this.guess != this.answer1); //end of Do Control Statement 
System.out.println("Correct!"); 
} //end of method1 
} //End of the class Guesser 

//Main class comes here 
public class DemoGuess { 

    public static void main(String args[]) { 
     System.out.println("Guess the number..."); 
     int input; 

     Scanner in = new Scanner(System.in); 
     input = in.nextInt(); 
     Guesser ActionGuess = new Guesser(5,input); 
     ActionGuess.method1(); 


    } //end of main() method 

} //end of DemoGuess class 
+1

Вы никогда ничего не сделаете, чтобы изменить «ответ1» или «угадать» внутри своей петли. – chrylis

ответ

0

Ни в одной точке в цикле вы ждете для пользователя, чтобы ввести номер, и сохраните этот номер в this.guess. Скорее, вы продолжаете цикл, пока их оригинал угадывается. Который, конечно, никогда не бывает.

0

Чтобы получить новые значения угасания, вам нужно запросить и прочитать ввод во время цикла.

public void method1() { 
    Scanner input = new Scanner(System.in); 
    int guess = 0; 
    do { 
     System.out.println("Guess the number..."); 
     guess = input.nextInt(); // prompt user for a new guess 
     if (guess != answer) { 
      System.out.print("Your guess is wrong.\nYou are too "); 
      System.out.println((guess < answer) ? "low" : "high"); 
     } 
    } while (guess != answer); 
    System.out.println("Correct!"); 
    input.close(); 
} 
+0

спасибо за измененный код pmcevoy! Не могли бы вы прояснить, как работает этот оператор: System.out.println ((guess Vlad

+0

Hi @Vlad. Это «тройной» оператор. Это действительно полезно, когда вы это понимаете. Формат «условие»? true-result: false-result'''. В этом случае условие «угадать <ответ». Если это так, он возвращает «low», поэтому System.out.println() вызывается с «низким». В противном случае он называется «высоким» – pmcevoy12

+0

Это действительно! Огромное спасибо! теперь это имеет смысл. – Vlad