2013-07-09 8 views
3

Я все еще участвую в Java. Я сделал какую-то гадательную игру. Это выглядит так:Сравнение ввода пользователя с целым числом

import java.util.Scanner; 
import java.util.Random; 
public class guessing_game { 

    static Scanner input = new Scanner(System.in); 
    static Random generator = new Random(); 
    public static void main(String[] args) { 
     int number; 
     number = generator.nextInt(20); 
     System.out.println("Guess the number!"); 
     game(number); 
    } 
    public static void game(int number) { 
     int inputStorage; 
     inputStorage = input.nextInt(); 
     if (inputStorage == number) { 
      System.out.println("You've guessed the right number!"); 
     } 
     else if (inputStorage != number) { 
      System.out.println("Wrong number, try again!"); 
      game(number); 
     } 
    } 
} 

Теперь у меня есть проблема. Моя младшая сестра и я играли в эту «игру». Моя сестра печатала на numpad. Она случайно нажала кнопку +, прежде чем нажимать кнопку ввода, и я получил некоторые ошибки. Мой вопрос: как я могу позволить моему приложению напечатать строку, в которой говорится, что вы можете вводить только номера, а затем снова перезапускать заглушку игры?

ответ

4

Один из способов - обернуть input.nextInt() в оператор try catch и уловить исключения, которые генерируются input.nextInt(), InputMismatchException. Хороший учебник для операторов try catch - это here, если вы не знаете, о чем я говорю.

try { 
    inputStorage = input.nextInt(); 
} catch (InputMismatchException e){ 
    System.out.println("invalid type"); 
} 

Другим способом вы можете сделать это:

if(input.hasNextInt()){ 
    inputStorage = input.nextInt(); 
}else{ 
     System.out.println("invalid type"); 
} 

Существует также ошибка с продолжением игры попробуйте использовать время цикла с перерывом, если номер был угадала:

int inputStorage; 
boolean notGuessed = true; 
while(notGuessed) 
{ 
    if(input.hasNextInt()){ 
     inputStorage = input.nextInt(); 
    } else{ 
     System.out.println("invalid type"); 
     } 
    if (inputStorage == number) { 
     System.out.println("You've guessed the right number!"); 
     notGuessed = false; 
    } 
    else if (inputStorage != number) { 
     System.out.println("Wrong number, try again!"); 

    } 
} 
+0

Я настоящий новичок в Java, возможно ли изменить недопустимое логическое догадывание и установить его по умолчанию по умолчанию? Я не на своем компьютере прямо сейчас, поэтому я не могу проверить это ... –

+0

Да, это возможно, но вам нужно добавить логическое или к условию while: while (! Угадано). –

+0

Это не работает. Когда я ввожу букву, появляется текст «недопустимый тип» и не останавливает печать. Он продолжает идти и уходить ... –

0

Вы можете использовать try/catch:

boolean b = true; 
while (b) { 
    try { 
      inputStorage = input.nextInt(); 
      b= false; 
    } catch (InputMismatchException e) { 
      System.out.println("Invalid input. Please enter again!"); 
    } 
} 
0

С учетом полученной вами ошибки был Исключением: InputMismatchException.

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

Read this

Read this

знать, как это на самом деле работает.

Вышеуказанные ответы касаются обработки исключений.

1

Хорошо, это довольно просто. Вы можете сделать это по-разному.

Попробуйте один

public static int checkInt(String strNumber) { 
    int Number; 
    try {   
     Number = Integer.parseInt(strNumber); 
    } catch (NumberFormatException ex) { 
     Number = -1; 
    } 
    return Number; 
} 

Или еще проще:

public static int checkInt(String strNumber) { 

    Number = Integer.parseInt(strNumber, -1); 

    return Number; 
} 

Второй еще проще, потому что вы опускаете попробовать поймать блок, что весьма не правильно использовать в таком случае. Читайте о функциях класса Integer.

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