2013-07-10 36 views
1

我正在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 = 0; 
     boolean b = true; 
     while (b) { 
      if (input.hasNextInt()) { 
       inputStorage = input.nextInt(); 
       if (inputStorage == number) { 
        System.out.println("You've won!"); 
        b = false; 
       } 
       else { 
        System.out.println("Wrong number! Try again."); 
       } 
      } 
      else { 
       System.out.println("Only numbers! Try again."); 
      } 
     } 
    } 
} 

的问题是,当用户键入一个字符串,如一个字母,应用表明:只有数字!再试一次。应用程序不会停止一遍又一遍地打印此行。如何阻止此?

回答

1

如果你插入的东西不是数字,那么(input.hasNextInt())将返回false,因此你不会进入if语句并转到最低的else语句。

我建议你读下一个字符串,而不是,如果字符串没有可转化为int那么你处理这种情况

+0

我该怎么做?我是Java的初学者,现在学习了一个星期... –

+1

好吧,我已经开始工作了。我做了一个新的字符串,并将该字符串设置为用户输入的任何内容。然后我使用这一行:'int inputStorage1 = Integer.parseInt(inputString);'。然后通过使用catch/try和if语句,我可以使用它。你能向我解释为什么当我这样做时,它只显示“唯一的数字”吗?因为当我使用整数时,我的应用程序不会停止打印行。我的新应用程序:http://pastebin.com/8m4WsV0T –

1
public static void game(int number) { 
    while (true) { 
     try{ 
      System.out.print("Guess a number: "); // prompt user to enter an int 
      inputStorage = input.nextInt(); // read the number 
      if (inputStorage == number) { 
       System.out.println("You've won!"); 
       break; 
      } 
      else { 
       System.out.println("Wrong number! Try again."); 
      } 
     } catch(final Exception ignored) { // input was not a number 
      System.out.println("\nOnly numbers! Try again."); 
      input.next(); // consume the invalid input 
     } 
    } 
} 

这将提示用户输入一个数字,并只告诉用户如果没有出现,他们需要输入一个数字。

如果用户没有输入有效的数字,则会抛出异常并捕获catch语句。在这种情况下,输入的输入不是整数。

+0

我的问题是,我的应用程序不会停止打印“只有数字!再试一次。” –

+0

@SanderdeLange你有没有尝试过的代码? – 2013-07-10 19:41:12

+0

是的,但每毫秒会有一个新行说只有数字!我已经做到了。我将输入转换为一个字符串,然后将其解析为一个整数。如果这是不可能的,catch/try语句将会说只有数字。但我不知道为什么这个信息只出现一次。 –

0

使用try catch语句很简单

try { 
    ... 
} catch (NumberFormatException, ScannerException exception) { 
    System.out.println("Input must be a number."); 
}