Java 是否可以从两个不同的方法中获得两个具有相同异常类型的捕获?

Java 是否可以从两个不同的方法中获得两个具有相同异常类型的捕获?,java,try-catch,inputmismatchexception,Java,Try Catch,Inputmismatchexception,我是新来这里和编程,所以如果这是太长的抱歉。我相信有一个更简单的方法可以做到这一点,但我真的很想看看这是否能得到解决 我正在开发一个程序,它接受用户输入(双精度)并将摄氏度转换为华氏度(cToF),反之亦然(fToC),限制为0到1000。我对cToF和fToC都有一个单独的方法 我想在用户没有输入double时抛出一个异常。我主要有catch(InputMismatchException cToF)和catch(InputMismatchException 2 fToC),它们做不同的事情 另

我是新来这里和编程,所以如果这是太长的抱歉。我相信有一个更简单的方法可以做到这一点,但我真的很想看看这是否能得到解决
我正在开发一个程序,它接受用户输入(双精度)并将摄氏度转换为华氏度(cToF),反之亦然(fToC),限制为0到1000。我对cToF和fToC都有一个单独的方法
我想在用户没有输入double时抛出一个异常。我主要有catch(InputMismatchException cToF)和catch(InputMismatchException 2 fToC),它们做不同的事情
另外,我怀疑fToC的数学是不正确的,我只是还没有开始

我尝试将InputMissMatchException 2的名称更改为InputMissMatchException,但得到“异常已被捕获”。 我已经导入了java.util.*
我尝试在main方法和两个转换方法的开头添加“throwsexception”
我不确定try-catch是在main中,还是在单个方法中,或者两者都在

public static void main(String args[]) throws InputMismatchException, InputMismatchException2 {

    Scanner choice = new Scanner(System.in);
    String unit = "n";
    boolean typo = false;
    double tempC = 0;
    double tempF = 0;

    try {
        start();//method to determine conversion type (F-C or C-F)

        if (typo == false) {

            do {//forever loop

                question(unit);

            }//end do loop
            while (typo == false);

        }//end if

        System.out.println("Thank you, goodbye!");

    }//end try

    catch (InputMismatchException cToFE) {//if a non-double is entered

        System.out.println("The value " + tempC + " is not within previously defined constraints.");
        System.out.println("Please enter a new value.");
        cToF(unit);

    }//end cToF catch

    catch (InputMismatchException2 fToCE) {//if a non-double is entered

        System.out.println("The value " + tempF + " is not within previously defined constraints.");
        System.out.println("Please enter a new value.");
        fToC(unit);

    }//end fToC catch

}//end main method

public static void cToF(String unit) throws InputMismatchException {

    System.out.println();
    System.out.println("Please enter a value from 0 to 1000.");//CONSTRAINTS: 0 <= temp <= 1000

    Scanner temp = new Scanner(System.in);
    double tempC = temp.nextDouble();

    if (0 <=  tempC && tempC <= 1000) {//if tempC is within constraints

        double tempF = (tempC * 1.8) + 32;//arithmetic with tempC == tempF

        System.out.println(tempC + " degrees Celsius is " + tempF + " degrees Fahrenheit");//print conversion

    }//end if
    else if (tempC < 0 || tempC > 1000) {//if tempC is NOT within constraints

        System.out.println("The value " + tempC + " is not within previously defined constraints.");
        System.out.println("Please enter a new value.");
        cToF(unit);

    }//end else if
    else {//if non-double entered

        //InputMismatchException cToFE = new InputMismatchException();
        throw new InputMismatchException();

    }//end else

}//end cToF method

public static void fToC(String unit) throws InputMismatchException2 {

    System.out.println();
    System.out.println("Please enter a value from 0 to 1000.");//CONSTRAINTS: 0 <= temp <= 1000

    Scanner temp = new Scanner(System.in);
    double tempF = temp.nextDouble();

    if (0 <=  tempF && tempF <= 1000) {//if tempF is within constraints

        double tempC = (32 - tempF) / 1.8;//arithmetic with tempF == tempC
        System.out.println(tempF + " degrees Fahrenheit is " + tempC + " degrees Celsius");//print conversion

    }//end if
    else if (tempF < 0 || tempF > 1000) {//if tempF is NOT within constraints

        System.out.println("The value " + tempF + " is not within previously defined constraints.");
        System.out.println("Please enter a new value.");
        fToC(unit);

    }//end else if
    else {//if non-double entered

        //InputMismatchException2 fToCE = new InputMismatchException2();
        throw new InputMismatchException2();

    }//end else

}//end fToC method
简而言之,你不能这样做。否则,就不可能在抛出异常时确定要执行的正确catch语句

这里的错误是“错误:找不到符号”。根据错误跟踪,这意味着无法找到符号
inputmatchException2
。本质上,如果您想抛出一个
inputmaschException2
,您需要定义一个单独的类
inputmaschException2
(扩展
inputmaschException
)。然后您可以运行代码的原因是,您实际上会抛出和捕获两种不同类型的
inputmaschException
inputmaschException
inputmaschException 2

然而!您最好初始化一个
inputmaschException
,并使用它的方法提取catch语句中的相关信息

更仔细地看代码,使用异常作为控制流的一部分是非常必要的

简而言之,你不能这样做。否则,就不可能在抛出异常时确定要执行的正确catch语句

这里的错误是“错误:找不到符号”。根据错误跟踪,这意味着无法找到符号
inputmatchException2
。本质上,如果您想抛出一个
inputmaschException2
,您需要定义一个单独的类
inputmaschException2
(扩展
inputmaschException
)。然后您可以运行代码的原因是,您实际上会抛出和捕获两种不同类型的
inputmaschException
inputmaschException
inputmaschException 2

然而!您最好初始化一个
inputmaschException
,并使用它的方法提取catch语句中的相关信息


更仔细地看代码,使用异常作为控制流的一部分是非常必要的

我在开头的start()方法中调用了cToF/fToC。我的理解是,当它在cToF方法中并抛出异常时,我可以让catch打印错误消息,然后再次调用该方法,对吗?这就是为什么我希望InputMismatchException vs InputMismatchException会有所帮助。我的理解是,当它在cToF方法中并抛出异常时,我可以让catch打印错误消息,然后再次调用该方法,对吗?这就是为什么我希望InputMismatchException vs InputMismatchException会有所帮助。我是否在main方法中初始化它?在室内还是室外?因为这不是新方法,对吧?初始化什么?例外<代码>抛出新的InputMismatchException(“某些内容不匹配!”)会起作用。当您执行捕获(InputMismatchException ime){…}时,您希望将异常中的值用作
ime.getMessage()
@castiyeaux我已经做了一个快速演示。将要打印的内容是:
这将打印
出现问题:不匹配我明白了!最后两条评论帮助很大。非常感谢你!我是否在main方法中初始化它?在室内还是室外?因为这不是新方法,对吧?初始化什么?例外<代码>抛出新的InputMismatchException(“某些内容不匹配!”)
会起作用。当您执行捕获(InputMismatchException ime){…}时,您希望将异常中的值用作
ime.getMessage()
@castiyeaux我已经做了一个快速演示。将要打印的内容是:
这将打印
出现问题:不匹配我明白了!最后两条评论帮助很大。非常感谢你!
$ javac Temperature.java
Temperature.java:5: error: cannot find symbol
    public static void main(String args[]) throws InputMismatchException, InputMismatchException2 {
                                                                          ^
  symbol:   class InputMismatchException2
  location: class Temperature
Temperature.java:125: error: cannot find symbol
    public static void fToC(String unit) throws InputMismatchException2 {
                                                ^
  symbol:   class InputMismatchException2
  location: class Temperature
Temperature.java:42: error: cannot find symbol
        catch (InputMismatchException2 fToCE) {//if a non-double is entered
               ^
  symbol:   class InputMismatchException2
  location: class Temperature
Temperature.java:151: error: cannot find symbol
            throw new InputMismatchException2();
                      ^
  symbol:   class InputMismatchException2
  location: class Temperature
4 errors