将InputMismatchException转换为用户定义的异常

时间:2015-09-18 13:57:37

标签: java exception try-catch

我希望我的代码将InputMismatchException的名称更改为NotANumberException。 这是我的代码,如果输入非数字字符,则会形成错误。我该如何解决这个问题?

主类:

import java.util.*;

public class Grade {

    public static void main(String args[]){
        Scanner input = new Scanner(System.in);
        int grade;
        String remark;
        try{
            System.out.print("Enter Grade: ");
            grade = input.nextInt();
        }
        catch(NotANumberException e){
            System.out.println(e.notgetMessage());
        }
    }
}

第二课:

import java.util.*;

public class NotANumberException extends InputMismatchException{

   public String notgetMessage(){
      return "You did not input a number. Please try again!";
   }

}

3 个答案:

答案 0 :(得分:2)

您必须捕获Scanner类实际抛出的异常,然后对其执行某些操作,例如创建并抛出自定义异常。

    catch(InputMismatchException e){
        throw new NotANumberException(e);
    }

答案 1 :(得分:1)

您无法在代码中捕获InputMismatchException子类型的异常。

此外,您无法更改java.util Scanner.nextInt方法以抛出自定义异常类,因为它是Java库的util库。

http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#nextInt()

您的受理的可能解决方案是

在第一个类中创建一个返回int的方法

public class Grade {

    //New method
    public int getIntegerInput() throws NotANumberException {
        Scanner input = new Scanner(System.in);
        try {
           return input.nextInt();
        } catch( InputMismatchException e) {
            throw new NotANumberException();
        }
    }

    public static void main(String args[]){

        int grade;
        String remark;
        try{
            System.out.print("Enter Grade: ");
            grade = getIntegerInput();
        }
        catch(NotANumberException e){
            System.out.println(e.notgetMessage());
        }
    }
}
PS:正如您所说,这是一项任务,您试图努力学习Java Type系统并扩展异常类并添加throws签名。这只是帮助您完成任务的原型。

答案 2 :(得分:0)

package com.geek.test;

import java.util.InputMismatchException;

import java.util.Scanner;

公共课Test4 {

public static void main(String args[]){
    Scanner input = new Scanner(System.in);
    int grade;
    String remark;
        try{
            System.out.print("Enter Grade: ");
            grade = input.nextInt();
        }
        catch(InputMismatchException e){
            System.out.println("You did not input a number. Please try again!");

        }
    }

}