2014-12-05 91 views
3

由于2年的生锈,我一直在从头开始学习Java,而且我正在玩一个简单的随机生成器代码。我的问题是,当用户被问及他想要的最高掷骰数时,它必须是一个数字(int)类类型。如何比较变量以查看它是否是正确的类类型?

我试图创建一个if语句并将一个变量与它的类进行比较,而不是让我的IDE停止并在用户输入字母的情况下向我显示错误消息。

这里是我的代码(这是有史以来最简单的代码,但它是安全地说,我是新和激励自己再学习Java。):

package firstguy; 

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

public class randomnum { 
    public static void main(String[] args){ 
     Random dice = new Random(); 
     Scanner userin = new Scanner(System.in); 
     int number; 
     int highnum; 

     System.out.println("What's the highest roll you want? \n"); 
     highnum = userin.nextInt(); 



     for(int counter=1; counter<= highnum; counter++){ 
      number= 1 + dice.nextInt(highnum); 
      System.out.println("This is the number " + number); 
     } 
    } 
} 

我希望能够比较highnum,在这里查看它是否保持类类型为int而不是字母。如果输入字母或字符,则应显示消息或重复提问。我一直在努力寻找这个问题,但我不断得到比较同一类类型的两个变量的结果。

是否没有办法将变量与类类型进行比较?

+0

不应该有一个C++标签 – 2014-12-05 19:04:52

回答

7

Java的原始类型没有类。它们的包装类型可以,但是你的代码不会使用它们。

你要做的是检查最终用户输入是否存在表示整数与其他所有字符的字符组合。这样做相对容易,因为Scanner为各种数据类型提供了方法hasNext...。您可以在一个循环中使用hasNextInt(),丢弃无用输入,就像这样:

System.out.println("What's the highest roll you want? \n"); 
while (!userin.hasNextInt()) { 
    System.out.println("Please enter an integer."); 
    userin.nextLine(); 
} 
// Since we reached this point, userin.hasNextInt() has returned true. 
// We are ready to read an integer from the scanner: 
highnum = userin.nextInt(); 
+0

这很有趣。非常感谢!我现在明白了hasNext方法的用处。我正在按照if语句的思路思考。 – OrangeLime 2014-12-05 19:13:52

1

nextInt()(或其他大多数nextXYZ方法,对于这个问题),抛出一个InputMismatchException,如果他们遇到输入不符合他们的要求(例如,在nextInt呼叫中的字母)。因此,一个选择是简单地抓住它:

int highnum; 
try { 
    highnum = userin.nextInt(); 
} catch (InputMismatchException e) { 
    System.out.println ("Wrong input encountered"); 
} 
+0

你能告诉我“e”是什么吗?我只听说过“捕捉”和错误处理,但从来没有机会充分理解,但它似乎是一种提供消息的方式,而不是简单地在IDE中引发异常错误。 – OrangeLime 2014-12-05 19:15:54

+0

它是名称变量,类型为InputMistmatchException – 2014-12-05 19:16:30

+0

@OrangeLime yes,'e'我们正在捕获InputMismatchException的实例。如果你愿意,你可以在'catch'块中使用它。例如:'System.out.println(“遇到错误的输入,错误:”+ e);' – Mureinik 2014-12-05 19:18:16

-2

试试这个:

boolean go = true; 

System.out.println("What's the highest roll you want? \n"); 
     while(go){ 
     try{ 
     highnum = userin.nextInt(); 
     go = false; 
    catch(Exception e){ 
     System.out.println("Please type in an integer: "); 
     highnum = userin.nextInt(); 
     } 

} 
+0

您的帖子已被标记为低质量的答案。请添加一些信息或解释到您的文章。 – 2014-12-05 19:16:00

+0

很酷,如果发生错误(在第一次输入时),您必须输入两次新的东西。 – Tom 2014-12-05 19:33:39

1

什么你要找的是不是一个方法来“一变量比作类类型 “,而是检查String以查看它是否具有正确的格式。如果你想看看一个String仅由数字,最简单的方法是使用matches和正则表达式:

if (inputString.matches("\\d+")) { 
    ... the input is valid 
} else { 
    ... complain 
} 

正则表达式在这里的意思是“一个或多个数字”。您也可以在Scanner上使用hasNextInt,或在Scanner上使用nextInt并捕获异常,或使用Integer.parseInt(inputString)并捕获异常,仅举几例。

+0

提供许多方法给你一个 – 2014-12-05 19:18:05

相关问题