2014-07-26 3 views
0

Я перестал программировать какое-то время. Вероятно, около 4 лет, и я просто искал, чтобы с ним обойтись, поэтому я решил сделать игру с высоким рейтингом. (угадайте номер 1-100, программа говорит, что если ваша догадка слишком высокая или слишком низкая), и я полностью забыл, как бы я поступил:Java Basic High: Low Guessing Game Help (Loops)

a) Как только пользователь угадывает правильный номер, спрашивает, хотят ли они играть снова b) Если они не угадывают правильное число (слишком высокое или слишком низкое), программа позволяет им снова угадать.

Я понимаю, что вы нужны петли, но я просто забыл о том, как я бы о них

package highlow; 

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

public class guessing { 
    public static void main(String[] args){ 

     Scanner input = new Scanner(System.in); 

     Random rand = new Random(); 
     int tries; 
     int correctNum = rand.nextInt(100); 

     System.out.println("enter a number 1-100"); 
     int guess1 = input.nextInt(); 

     if(guess1 < correctNum){ 
      System.out.println("number is too low!"); 
     } 
     else if(guess1 > correctNum){ 
      System.out.println("Number is too high!"); 
     } 
     else if(guess1 == correctNum){ 
      System.out.println("correct!"); 
     } 
     else{ 
      System.out.println("not a valid option"); 
     } 


    } 

} 
+1

рассмотрите возможность использования цикла while. –

ответ

4

Вам нужно обернуть все в while петли, так что она не устает повторять, пока пользователь не угадает правильно:

// Make the scanner, get the random number etc... Put all the setup and 
// stuff you don't want to be repeated here 

while (true) { 
    System.out.println("enter a number 0-99"); // Changed from 1-100 because rand.nextInt(100) 
               // returns a number between 0 and 99 
               // You can do correctNum += 1 to make it between 1 and 100 
               // But put this in before the while loop starts 
    int guess1 = input.nextInt(); 

    if(guess1 < correctNum){ 
     System.out.println("number is too low!"); 
    } 
    else if(guess1 > correctNum){ 
     System.out.println("Number is too high!"); 
    } 
    else if(guess1 == correctNum){ 
     System.out.println("correct!"); 
     break; // <---- Add this, this will make the loop stop when the 
       //player gets the answer correct and therefore the program will end 
    } 
    else{ 
     System.out.println("not a valid option"); 
    } 
} 

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

+0

nice point zach :) +1 добавьте еще один соп, спрашивающий пользователя, хочет ли он снова играть. –

+1

Будем надеяться, что пользователь достаточно дерзкий, чтобы ввести 0, когда случайное число окажется таким низким, и не верю, что можно ввести только 1-100. Аналогично, 100 не является возможным результатом. – laune

+0

Да, это правда, я отредактирую это в – Zach

0
package highlow; 

import java.util.*; 

public class guessing 
{ 
    public static void main (String [] args) 
    { 
     boolean wantstoplay = true; 

     while(wantstoplay) 
     { 
      play(); 
      System.out.println("Would you like to play again?"); 
      Scanner kb = new Scanner (System.In); 
      if ((kb.nextLine().equals("yes") || (kb.nextLine().equals("Yes")) 
       wantstoplay = true; 
      else 
       wantstoplay = false; 
     } 

    } 
    public void play() 
    { 
     boolean playing = true; 
     int correctNum = (int) ((Math.Random() *100) + 1); 
     //selects random double from [1,101) and then rounds down 
     int tries = 0; 

     while (playing) 
     { 
      Scanner input = new Scanner(System.in); 

      System.out.println("enter a number 1-100"); 
      int guess = input.nextInt(); 

      if(guess < correctNum){ 
       System.out.println("number is too low!"); 
       tries++; 
      } 
      else if(guess > correctNum){ 
       System.out.println("Number is too high!"); 
       tries++; 
      } 
      else if(guess == correctNum){ 
       System.out.println("correct!"); 
       if (tries > 1) 
        System.out.println("Congrats, you guessed the right number. It only took you " + tries + " attempts!"); 
       else 
        System.out.println("You guessed it first try! good job"); 
      } 
      else{ 
       System.out.println("not a valid option"); 
      } 

     } 

    } 
} 

Выше приведен пример кода, который может быть полезен. Предлагаю создать способ воспроизведения, а затем вызвать его в основном методе. Это делает ваш код более организованным и читаемым, потому что теперь вы получите нужные вам функции без 1 беспорядочного метода с 2 циклами в нем.

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

В то время как основной метод проверяет, хочет ли пользователь другой игры. Обратите внимание, что он предполагает, что пользователь хочет сыграть хотя бы одну игру. Я сделал это, установив wantstoplay как истинный, прежде чем мы вошли в цикл, но это также могло быть сделано с циклом do-while. Для получения дополнительной информации см. (http://www.java-examples.com/do-while-loop)

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

Надеюсь, что это поможет вам вернуться к программированию!