我希望我的代码将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!";
}
}
答案 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!");
}
}
}