2013-10-02 4 views
1

Я пытаюсь создать программу угадывания игр. Пользователь вводит номер, и ему сообщают, слишком ли оно слишком высокое или низкое, а затем снова предлагается угадать. Я сделал бесконечный цикл, и я не могу понять, как его изменить. Я понимаю, что если предположение неверно, программа будет продолжать проверять неправильное значение и печатать сообщение «неправильное число».Бесконечный предварительный тест во время цикла (java)

package guessinggame; 
import java.util.Scanner; 
/** 
* 
* @author 
*/ 
public class GuessingGame { 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) 
    { 
     Scanner input = new Scanner (System.in); 

     int guesses; //number of users guesses 

     int housePick; //number the user must guess 

     int guess;  //users guess 

     housePick = (int)((Math.random() * 100) +1); 
     //sets housePick to random number from 1 to 100 

     System.out.println("I'm thinking of a number between 1 and 100") ; 
     //print "Im thinking of a nubmer between 1 and 100" 

     System.out.println("Can you guess what it is?"); 
     //print "can you guess what it is" 

     System.out.println 
       ("Enter a number from 1 to 100 (including 1 and 100)"); 
     //prompt user to enter number 

     guess = input.nextInt(); 
     //save entered number as guess 

     while (guess != housePick) //while guess doesnt = housePick... 
     { 
      if (guess > housePick) //and if guess > housePick... 
      { 
       if ((guess - 10) <= housePick) 
        //and if guess is 10 numbers away from housePick... 

       { 
        System.out.println("Close, but too high. Try again."); 
        //print "close but too high, try again" 

       } 
       else    //if guess is not close and guess>housePick... 
       { 
        System.out.println ("Too high, try again."); 
        //then print "Too high, Try again" 
       }       
      } 
      else //If guess<housePick 
      { 
      if ((guess + 10) >= housePick) //AND if guess is close to housePick 
      { 
       System.out.println ("close, but too low.") ; 
       //then print "close, but too low" 

      } 
      else//If guess isnt close to housePick and is less than housePick... 
      { 
       System.out.println ("Too low.");//then print "too low" 
      } 

      } 

     } 



     System.out.println ("You win! It took you " + "guesses."); 
     //If guess = housePick print "Yout win! It took you (# of guesses)" 




    } 
} 

ответ

1

Вы никогда не получаете выбор пользователя и не изменяете значение переменной угадывания внутри цикла while. Если догадка никогда не изменится, цикл никогда не закончится, так как это никогда не изменится: while (guess != housePick) и условие остается ложным.

Решение:
ли очевидные: использовать переменный входной сканер, чтобы получить пользовательский ввод от внутри в то время цикл, и использовать его повторно установить догадку на новое значение.

1

Вы верны на каком-то уровне, но когда все идет не так, вы должны получить вход от пользователя до окончания цикла. Таким образом, вы должны получить вход от игрока непосредственно перед ends.I времени цикла сделали коррекцию и обновленный код (только часть, а петля) следующим образом

while (guess != housePick) //while guess doesnt = housePick... 
    { 
     if (guess > housePick) //and if guess > housePick... 
     { 
      if ((guess - 10) <= housePick) 
       //and if guess is 10 numbers away from housePick... 

      { 
       System.out.println("Close, but too high. Try again."); 
       //print "close but too high, try again" 

      } 
      else    //if guess is not close and guess>housePick... 
      { 
       System.out.println ("Too high, try again."); 
       //then print "Too high, Try again" 
      }       
     } 
     else //If guess<housePick 
     { 
     if ((guess + 10) >= housePick) //AND if guess is close to housePick 
     { 
      System.out.println ("close, but too low.") ; 
      //then print "close, but too low" 

     } 
     else//If guess isnt close to housePick and is less than housePick... 
     { 
      System.out.println ("Too low.");//then print "too low" 
     } 

     } 
      /// this is the correction 
      System.out.println 
      ("Enter a number from 1 to 100 again (including 1 and 100)"); 
      //prompt user to enter number 

      guess = input.nextInt(); 
    } 
0

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

while (guess != housePick) //while guess doesnt = housePick... 
    { 
     if (guess > housePick) 
     { 
      \\Your code remains as it is. 
       ... 
       ... 
       ... 
       ... 
     } //if-else loop ends here. 
     guess = input.nextInt(); 
    }//while ends here. 
0

Как уже упоминалось, причина, по которой у вас возникают проблемы, связана с тем, что вы не зацикливаете вход, а только проверяете. Поместите ваш input.nextInt() в цикл while, чтобы решить эту проблему.

Кроме того, в качестве точки процедуры это подходящее место для использования цикла do/while, а не нормального времени (так как вы всегда хотите запускать ввод хотя бы один раз).

Смежные вопросы