2015-09-18 1 views
3

Я недавно начал изучать Java, потратив много времени на веб-дизайн, но пока я пытался создать простую программу игр с угадыванием, я столкнулся с проблемой.Как заставить пользователя повторно присвоить значение до тех пор, пока оно не будет действительным.

 final int MAX = 15; 
    int answer, guess; 
    Scanner scan = new Scanner (System.in); 

    Random generator = new Random(); 
    answer = generator.nextInt(MAX) + 1; 

    System.out.println("I'm thinking of a number between 1 and " + MAX + ". Guess what is it: "); 

    guess = scan.nextInt(); 

    if (guess > MAX) 
     System.out.println("Please choose a number between 1 and 15."); 
    if (guess == answer) 
     System.out.println("You got it! Good guessing!"); 
    else 
    { 
     System.out.println("This isn't correct, sorry!"); 
     System.out.println("The number was " + answer); 

Я хочу, чтобы это так, где, если пользователь вводит значение больше, чем 15 он посылает их обратно повторно ввести действительное число от 1 до 15.

На первом, если я понимая, что он не выполнен, так как я планировал добавить эту функцию.

+0

Посмотрите на [Контрольные потоки] (https://docs.oracle.com/javase/tutorial/java/nutsandbolts/flow.html), в частности разделы 'for-loop',' while- loop' и 'do-while-loop' – MadProgrammer

ответ

2

Start, взглянув на Control Flow Statements‌​, в частности, разделы for-loop, while-loop и do-while-loop

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

что-то вроде ...

do { 

    System.out.print("Please choose a number between 1 and " + max + ":"); 
    guess = scan.nextInt(); 

} while (guess < 1 || guess > 15); 

что будет в основном продолжать запрашивать у пользователя, пока они не войдут иметь значение от 1 до 15 включительно.

Как работоспособный пример ...

import java.util.Random; 
import java.util.Scanner; 

public class GuessMe { 

    public static void main(String[] args) { 

     int max = 15; 

     int guess = 0; 
     Random generator = new Random(); 
     int answer = generator.nextInt(max) + 1; 
     Scanner scan = new Scanner(System.in); 

     System.out.println("I'm thinking of a number between 1 and " + max + ". Guess what is it\n"); 
     do { 

      do { 

       System.out.print("Please choose a number between 1 and " + max + ":"); 
       guess = scan.nextInt(); 

      } while (guess < 1 || guess > 15); 

      if (guess < answer) { 
       System.out.println("Good guess, but mine is higher"); 
      } else if (guess > answer) { 
       System.out.println("Good guess, but mine is low"); 
      } 

     } while (guess != answer); 

     System.out.println("Good guess, that's right!"); 

    } 

} 

Обновлено

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

Другим подходом может быть использование блока if-else вместо того, чтобы напрямую проверять результат ввода.

import java.util.Random; 
import java.util.Scanner; 

public class GuessMe { 

    public static void main(String[] args) { 

     int max = 15; 

     int guess = 0; 
     Random generator = new Random(); 
     int answer = generator.nextInt(max) + 1; 
     Scanner scan = new Scanner(System.in); 

     System.out.println("I'm thinking of a number between 1 and " + max + ". Guess what is it\n"); 
     do { 

      System.out.print("Please choose a number between 1 and " + max + ":"); 
      guess = scan.nextInt(); 

      if (guess < 1 || guess > 15) { 
       System.out.println("You did't enter a valid number, please try again"); 
      } else if (guess < answer) { 
       System.out.println("Good guess, but mine is higher"); 
      } else if (guess > answer) { 
       System.out.println("Good guess, but mine is low"); 
      } 

     } while (guess != answer); 

     System.out.println("Good guess, that's right!"); 

    } 

} 
+0

Можно было бы изменить do { guess = scan.nextInt(); } while (guess <1 || guess> 15); иметь только a} while (угадайте <1 || guess> 15); и распечатать что-то отдельное только в этом случае? Например, если я ввожу число в пределах от 1 до 15, он переходит прямо к «Хорошая догадка, но ...», но если вы НЕ ДОЛЖНЫ вводить число от 1 до 15, оно дает ошибку типа «Вы не вошли действительное число! Повторите попытку ». ? – primelf

+0

Короткий ответ: да. Вы не нуждаетесь во внутреннем цикле, и вы можете использовать оператор 'if', чтобы определить, как реагировать – MadProgrammer

+0

Хорошо, я думаю, что я собираюсь попытаться узнать больше об этом и сделать, прежде чем я сделаю многое с этим. Лучше понять, что я делаю! – primelf

0

Я думаю, что вы можете использовать рекурсию как:

/** 
     * main business process 
     * @param MAX the max number 
     * 
     * */ 
     public static void guess(int MAX) { 
      int answer, guess; 
      Scanner scan = new Scanner (System.in); 
      Random generator = new Random(); 
      answer = generator.nextInt(MAX) + 1; 

      guess = scan.nextInt(); 

      if (guess > MAX || guess < 1) { 
       System.out.println("Please choose a number between 1 and 15."); 
       //recursion 
       guess(MAX); 
      } else if (guess == answer) { 
       System.out.println("You got it! Good guessing!"); 
      } else { 
       System.out.println("This isn't correct, sorry!"); 
       System.out.println("The number was " + answer); 
      } 
     } 

     /** 
     * guessNumber method 
     * 
     * */ 
     public static void guessNumber() { 
      final int MAX = 15; 
      System.out.println("I'm thinking of a number between 1 and " + MAX + ". Guess what is it: "); 
      guess(MAX); 
     } 

     public static void main(String[] args) { 
      guessNumber(); 
     } 

Надеется, что это помощь!

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

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