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