我是Java的初学者,我有以下代码:
public class test
{
public static void main(String[] args)
{
int a ;
String b;
Scanner input = new Scanner(System.in);
try {
System.out.println("Enter a: ");
a = input.nextInt();
} catch(Exception e )
{
System.out.println("That is not a number!");
}
System.out.println("Enter your name: ");
b = input.next();
System.out.println("Hello " + b);
}
}
当我给出一个字符串而不是int时,代码执行得更远,我收到了这个结果:
"Enter a:
fsd
That is not a number!
Enter your name:
Hello fsd"
如何在捕获后中断? (我已经在捕获后尝试使用新的扫描仪,但我认为还有其他方法) 提前谢谢!
LE:我已经设法用" input.next();"来做到这一点。我实际上想要为字符串b提示另一个值,但是程序会自动获取int而不是新值并打印" Hello vsd",尽管vsd是a的输入。
答案 0 :(得分:2)
如the documentation所述,如果当前令牌与整数格式不匹配,Scanner
将不会前进到下一个令牌。因此,如果没有抛出异常,则令牌未被消耗,您只需在下次调用nextXYZ
方法时获取该消息。
将输入的下一个标记扫描为int。如果下一个标记无法转换为有效的int值,则此方法将抛出InputMismatchException,如下所述。如果翻译成功,扫描仪将超过匹配的输入。
您可以使用hasNextInt()
提前检查,而不是抛出和捕获异常(这是一个繁重的操作):
int a ;
String b;
Scanner input = new Scanner(System.in);
System.out.println("Enter a: ");
if (input.hasNextInt()) {
a = input.nextInt();
} else {
System.out.println("That is not a number!");
// Skip the token so you won't get it later:
input.nextLine();
}
System.out.println("Enter your name: ");
b = input.next();
System.out.println("Hello " + b);
答案 1 :(得分:1)
试试这个
public class Test{
public static void main(String[] args){
int a ;
String b;
Scanner input = new Scanner(System.in);
try {
System.out.println("Enter a: ");
a = input.nextInt();
System.out.println("Enter your name: ");
b = input.next();
System.out.println("Hello " + b);
}
catch(Exception e ){
System.out.println("That is not a number!");
}
}
}
答案 2 :(得分:0)
只需修改你的catch块如下:
catch(Exception e )
{
System.out.println("That is not a number!");
System.exit(0);
}
答案 3 :(得分:0)
您应该尝试使用以下块
input.hasNextInt()
因为它不要求你使用catch或throw异常,而是if和else语句。
您的代码仍在继续,因为catch块只是捕获异常并将其替换为 System.out.println ,它打印“这不是数字!”
} catch(Exception e )
{
System.out.println("That is not a number!");
}
这样做后代码继续
System.out.println("Enter your name: ");
b = input.next();
System.out.println("Hello " + b);