2015-05-09 48 views
1

我与Java初学者,我有以下代码:初学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 a而不是新值,并打印出“Hello vsd”,尽管vsd是a的输入。

+4

你的中断是什么意思? – aditsu

+1

你能澄清一下你的问题吗? – Blip

+0

你想做什么? – Prashant

回答

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

如前所述由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); 
0

只需修改catch块如下:

catch(Exception e) 
    { 
     System.out.println("That is not a number!"); 
     System.exit(0); 
    } 
+0

有了这段代码,程序不会进一步发展,我不能提示第二个值(名称)。不管怎么说,还是要谢谢你 – raz

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);