自从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 :(得分: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();
答案 1 :(得分:1)
nextInt()
(或大多数其他nextXYZ
方法,如果他们遇到与其通话不匹配的输入,则抛出InputMismatchException
(例如,一个nextInt
电话)。所以一种选择就是简单地抓住它:
int highnum;
try {
highnum = userin.nextInt();
} catch (InputMismatchException e) {
System.out.println ("Wrong input encountered");
}
答案 2 :(得分:1)
您正在寻找的不是“将变量与类型进行比较”的方法,而是检查String
以查看如果它有正确的格式。如果您想查看String
是否仅包含数字,最简单的方法是使用matches
和正则表达式:
if (inputString.matches("\\d+")) {
... the input is valid
} else {
... complain
}
这里的正则表达式表示“一个或多个数字”。您还可以在hasNextInt
上使用Scanner
,或在nextInt
上使用Scanner
并捕获例外,或使用Integer.parseInt(inputString)
并捕获例外,仅举几例少。
答案 3 :(得分:-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();
}
}