我定义了一个函数readInt()
,它返回int
(基于Scanner.nextInt()
)。
问题是:如果我输入一个角色,我会得到这个例外:(java.util.InputMismatchException
)。
我尝试使用try-catch
阻止修复但未成功。
怎么了?
public static int readInt(String message, int min, int max)
{
displayBlack(message);
int number = scanner.nextInt();
try{
if (number < min || number > max)
{
return readInt("Erreur, Selectionner un nombre entre " + min + " et " + max, min, max);
} else
{
return number;
}
}
catch (NumberFormatException e){
return readInt(message, min, max);
}
}
编辑:
我将我的功能改为:
public static int readInt(String message, int min, int max)
{
displayBlack(message);
try{
String result = scanner.next();
int number = Integer.parseInt(result);
if (number < min || number > max)
{
return readInt("Erreur, Selectionner un nombre entre " + min + " et " + max, min, max);
} else
{
return number;
}
}
catch (Exception e){
return readInt("Erreur, Selectionner un nombre entre " + min + " et " + max, min, max);
}
}
现在它正在运作。这是一个好方法还是一个肮脏的黑客?
答案 0 :(得分:1)
我相信你误解了错误的来源。你的try / catch看起来好像是超出了界限错误(例如太大而不是int或者太小)但是忽略了我认为是错误所在的scanner.nextInt()。尝试将它放在这样的try / catch中并使用它直到你得到正确的结果。
displayBlack(message);
try {
int number = scanner.nextInt();
} catch(Exception e) { //Just using this as a catch all - you might want to be more specific.
...
答案 1 :(得分:0)
我已经修改了一下你的代码。
public static Integer readInt(String message, int min, int max)
{
/*displayBlack(message);*/
try {
/*String result = scanner.next();*/
int number = Integer.parseInt(message);
if (number < min || number > max) {
System.out.println("Erreur, Selectionner un nombre entre " + min + " et " + max);
/*return readInt();*/
}
return number;
} catch (InputMismatchException e) {
System.out.println("You must enter a number: " + e.toString());
return null;
} catch (NumberFormatException e) {
System.out.println("You must enter a number: " + e.toString());
return null;
} catch (Exception e) {
System.out.println("Another problem:" + e.toString());
return null;
}
}
我使readInt返回一个Integer(如果数字无效,则可以为null)。
我注释掉了scanner.next语句,因为你似乎是通过消息传递它。
return语句只能返回方法签名中声明的类型的对象。由于您将其声明为int,因此只能返回int。我声明它是一个Integer,所以它可以返回一个int或null。请注意,它不能像您一样返回String。
我在最广泛的Exception
之前添加了两个捕获,即InputMismatchException
和NumberFormatException
。
我用这两个陈述测试了它:
Integer test = StackoverflowApplication.readInt("42", 0, 10);
Integer readMe = StackoverflowApplication.readInt("c", 0, 10);
第一个返回42(打印出“Erreur”消息时),第二个返回null。我抛出一个NumberFormatException。
答案 2 :(得分:-1)
您正在获取InputMismatchException,因为您使用了Scanner的nextInt(),它只在您给出字符时接受整数。如果你想接受字符串参数,那么你必须尝试next()或其他东西。希望它可以帮助你...