2015-06-28 3 views
0

У меня возникла проблема с простой игрой, которую я пытаюсь создать. Я уверен, что это простая ошибка, но я не могу ее получить. Две ошибки на самом деле, одна из них заключается в том, что после каждого ее прохождения он не увеличивает numOfTries, а другой - не правильно обрабатывает исключения. Я хочу, чтобы он выводил строку, когда ввод не является целым числом. Как исправить обе ошибки?Ошибка Java Guessing Game

/* 
* Guessing game 
*/ 

import java.util.*; 

public class GuessNumber { 

    public static void main(String[] args) { 
     Scanner input = new Scanner(System. in); 
     guess(input); 
     System.out.println("You got it correct after " + guess(input) + " tries"); 
    } 

    public static int guess(Scanner input) { 
     Random randomNumber = new Random(); 
     int numToGuess = randomNumber.nextInt(10); 
     int numOfTries = 0; 
     String prompt = "Enter your guess (integer from 1 to 10)"; 
     numOfTries++; 
     getInt(input, prompt); 
     if (getInt(input, prompt) == numToGuess) { 
      return numOfTries; 
     } else if (getInt(input, prompt) != numToGuess) { 
      getInt(input, prompt); 
     } 
     return numOfTries; 
    } 

    public static int getInt(Scanner input, String prompt) { 
     int userGuess = 0; 
     System.out.println(prompt); 
     try { 
      userGuess = input.nextInt(); 
     } catch (Exception e) { 
      System.out.println("You didn't enter an int"); 
     } 
     return userGuess; 
    } 
} 
+0

Определение "правильно" с точки зрения обработки исключений. –

+0

Назначьте возвращаемое значение вашего первого вызова 'guess (input)' переменной и используйте эту переменную в своем вызове println вместо того, чтобы снова называть угадать. –

+0

Вы снова вызываете методы вместо того, чтобы хранить результаты в переменных. Это не просто 'guess (input)', это также 'getInt (input, prompt)'. Позвоните еще раз - и он сделает все шаги снова, и это не то, что вы хотите. Кроме того, у вас нет цикла, и без этого вы не можете выполнить часть «попробуйте еще раз». – RealSkeptic

ответ

1

Несколько вещей:

  1. Вы называете догадку() дважды два различных раза. Локальные переменные в функции не сохраняют свои значения между вызовами функций, так что это может быть причиной, по которой вы не думаете, что numTries увеличивается. Кроме того, вызывая его дважды, вы вынуждаете пользователя угадывать два возможных разных случайных числа (иначе вы играете в игру дважды). У вас такая же проблема с getInt().

  2. Способ, которым вы вызываете nextInt (10), даст вам число от 0 до 9 включительно. Вы никогда не получите 10, и человек никогда не угадает 0, потому что подсказка говорит ему не делать этого.

  3. Каждый раз, когда вы вызываете угадать, вы разрешаете пользователю один раз, так что numTries увеличивается и возвращается, но только один раз, каждый раз возвращая значение 1. Чтобы позволить пользователю угадать несколько раз, поместите цикл while.

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

    public static void main(String[] args) 
    { 
        Scanner input = new Scanner(System.in); 
        int guesses = guess(input); 
        System.out.println("You got it correct after " + guesses + " tries"); 
    } 
    
    public static int guess(Scanner input) 
    { 
        String prompt = "Enter your guess (integer from 1 to 10)"; 
        Random randomNumber = new Random(); 
        numToGuess = randomNumber.nextInt(10) + 1; //+1 to make it 1-10 inclusive 
        numTries = 0; 
    
        while (getInt(input, prompt) != numToGuess) 
        { 
         numTries++; 
        } 
    
        return numTries; 
    } 
    
    public static int getInt(Scanner input, String prompt) 
    { 
        int userGuess = -1; 
        boolean valid = false; 
        System.out.println(prompt); 
    
        while (!valid) 
        { 
         try 
         { 
          userGuess = input.nextInt(); 
          valid = true; 
         } 
         catch (NumberFormatException e) 
         { 
          System.out.println("You did not enter an int. Try again"); 
         } 
        } 
    
        return userGuess; 
    } 
    
+0

Спасибо всем за помощь! Я знал, что это была некоторая логическая ошибка. СПАСИБО! – Alan