2017-04-13 126 views
0

所以我是一种新的捕捉错误等。无论如何,该程序应该要求用户输入2个整数,然后将它们加在一起。很简单,但如果其中任何一个数字都不是整数,则会引发错误。目前,如果我输入2个整数,而不是添加它们,它只是重新启动getAnswer()方法并再次输出它们。此外,如果您输入多个错误,它将简单地退出。Java异常处理

package javaapplication1; 

import java.util.InputMismatchException; 
import java.util.Scanner; 


public class JavaApplication1 { 

    public static void main(String[] args) { 
    Intro(); 
    System.out.println("Your answer: "+getAnswer()); 
    } 
    private static void Intro() { 
    System.out.println("Hello this program adds 2 integers together and catches errors."); 
    getAnswer(); 
    } 
    private static int getAnswer() throws InputMismatchException { 
    Scanner scanner = new Scanner(System.in); 
    try { 
     System.out.println("Please input a number"); 
     int num1 = scanner.nextInt(); 
     System.out.println("Please input a second number"); 
     int num2 = scanner.nextInt(); 
     return num1+ num2; 
    } catch (InputMismatchException exp) { 
     System.out.println("Exception thrown"); 
     return 0; 
    } 
    } 
} 
+0

您是否曾尝试在'getAnswer()'方法中加入调试点并逐步完成调试?此外,如果您遇到特殊类型的异常,方法签名不再需要说'抛出异常'。 –

+2

“目前,如果我输入2个整数,而不是添加它们,它只是重新启动getAnswer()方法并再次输出” - 是的,因为您的程序包含两个对'getAnswer'的调用,并且将第一个结果丢弃。 – user2357112

+0

你不想让它退出? – Henry

回答

3

要调用getAnswer();共两次,所以你只要从Intro()方法,就能解决问题删除通话。

private static void Intro() { 
     System.out.println("Hello this program adds 2 
      integers together and catches errors."); 
} 

如果您想提示用户再次重新输入输入,你可以调用catchgetAnswer()如下图所示:

private static int getAnswer() { 
     Scanner scanner = new Scanner(System.in); 
     try { 
     System.out.println("Please input a number"); 
     int num1 = scanner.nextInt(); 
     System.out.println("Please input a second number"); 
     int num2 = scanner.nextInt(); 
     return num1+ num2; 
     } catch (InputMismatchException exp) { 
      System.out.println("Exception thrown, please reenter values:"); 
      getAnswer(); 
     } 
     return 0; 
} 

还有一点是,而不是捕获InputMismatchException,另一种更好的方法是将输入读为字符串并验证它们仅包含如下的数值:

private static int getAnswer() { 
     Scanner scanner = new Scanner(System.in); 
     System.out.println("Please input a number"); 
     String num1 = scanner.nextLine(); 
     System.out.println("Please input a second number"); 
     String num2 = scanner.nextLine(); 
     if(num1.matches("[0-9]+") && num2.matches("[0-9]+")) { 
      return Integer.parseInt(num1)+ Integer.parseInt(num2); 
     } else { 
      System.out.println(" Your inputs contain Invalid characters"); 
      getAnswer(); 
     } 
     return 0; 
    } 
+1

如果他想让它继续运行并再次询问,则在'catch'块下,他应该将返回值更改为'return getAnswer();'。 – Henry

+0

啊,解决了这个问题,但是现在当程序捕获异常时它就退出了。 – Cory

+0

确实不应该使用捕捉异常作为询问正确输入的控件行为。应该读入两个值并验证它们是整数,然后继续输出不正确的输入并重试。 –