Java:异常处理-我的catch()有问题
这是测试类:Java:异常处理-我的catch()有问题,java,exception-handling,compiler-errors,Java,Exception Handling,Compiler Errors,这是测试类: public class Fraction { private int numerator; // private int denominator; // Fraction(int nume, int denom) { numerator = nume; denominator = denom; } public Fraction divide(Fraction other ) th
public class Fraction {
private int numerator; //
private int denominator; //
Fraction(int nume, int denom)
{
numerator = nume;
denominator = denom;
}
public Fraction divide(Fraction other ) throws FractionDivideByZeroException
{
int nume=0, denom=0;
try {
nume = (this.numerator * other.denominator);
denom = (this.denominator*other.numerator);
if(nume!=0 && denom==0) throw new FractionDivideByZeroException();
return new Fraction(nume, denom);
} catch (FractionDivideByZeroException e) {
e.printError();
}
return new Fraction(nume, denom);
}
}
class FractionDivideByZeroException extends Exception
{
void printError()
{
System.out.println("You can not divide by zero!");
}
}
从divide方法中取出抛出声明。你把它扔出去,然后自己处理
FractionTest使用frac1.divide,编译器要求您处理divide方法中声明的异常。从divide方法中取出抛出声明。你把它扔出去,然后自己处理
您的FractionTest使用frac1.divide,编译器要求您处理divide方法中声明的异常。您说过divide会抛出FractionDivideByZeroException
public class FractionTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Fraction frac1 = new Fraction(1,2);
Fraction frac2 = new Fraction(1,3);
Fraction frac3 = frac1.divide(frac2); // here's the error message saying "Unhandled exception type FractionDivideByZeroException"
System.out.println(frac3);
}
}
但是要编写代码以确保它不会。编译器不知道这一点,因此抱怨您/没有在调用代码中处理异常您说过Divide抛出FractionDivideByZeroException
public class FractionTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Fraction frac1 = new Fraction(1,2);
Fraction frac2 = new Fraction(1,3);
Fraction frac3 = frac1.divide(frac2); // here's the error message saying "Unhandled exception type FractionDivideByZeroException"
System.out.println(frac3);
}
}
但是要编写代码以确保它不会。编译器不知道这一点,因此抱怨您/没有处理调用代码中的异常您声明
devide
是一个抛出FractionDivideByZeroException
的方法您的测试函数必须捕获它。
或您的函数不会引发此异常,因此
引发FractionDivideByZeroException
是多余的。您说过Device
是一种引发FractionDivideByZeroException
的方法
您的测试函数必须捕获它。或函数不会抛出此异常,因此
抛出FractionDivideByZeroException
是多余的。将try/catch块添加到主方法FractionDevidedByZeroException
是一个选中的异常。你应该用try/catch来包围他们。否则会出现此编译错误
public Fraction divide(Fraction other ) throws FractionDivideByZeroException
将try/catch块添加到main方法
FractionDevidedByZeroException
是一个选中的异常。你应该用try/catch来包围他们。否则会出现此编译错误
public Fraction divide(Fraction other ) throws FractionDivideByZeroException
查看您的方法签名:
public static void main(String[] args) {
// TODO Auto-generated method stub
Fraction frac1 = new Fraction(1,2);
Fraction frac2 = new Fraction(1,3);
try {
Fraction frac3 = frac1.divide(frac2);
System.out.println(frac3);
} catch (FractionDevidedByZeroException e) {
e.printStackTrace();
}
}
它说它抛出了异常。main方法没有捕获它,因此编译器会抱怨
在方法中捕获它或声明抛出它,但不能同时使用两者
我认为你的逻辑有缺陷。你永远不能创建一个分母为零的分数-你的构造函数应该检查它
您的divide()方法应该进行检查,以确保除数的分子不是零。这是得到除零误差的唯一方法
当您构造除法返回的新分数时,构造函数应该抛出一个异常
不要在divide()方法中捕捉它;保留throws子句并删除try/catch。如果它是一个已检查的异常,您的测试用例必须捕获它
我是这样写的:
public Fraction divide(Fraction other ) throws FractionDivideByZeroException
查看您的方法签名:
public static void main(String[] args) {
// TODO Auto-generated method stub
Fraction frac1 = new Fraction(1,2);
Fraction frac2 = new Fraction(1,3);
try {
Fraction frac3 = frac1.divide(frac2);
System.out.println(frac3);
} catch (FractionDevidedByZeroException e) {
e.printStackTrace();
}
}
它说它抛出了异常。main方法没有捕获它,因此编译器会抱怨
在方法中捕获它或声明抛出它,但不能同时使用两者
我认为你的逻辑有缺陷。你永远不能创建一个分母为零的分数-你的构造函数应该检查它
您的divide()方法应该进行检查,以确保除数的分子不是零。这是得到除零误差的唯一方法
当您构造除法返回的新分数时,构造函数应该抛出一个异常
不要在divide()方法中捕捉它;保留throws子句并删除try/catch。如果它是一个已检查的异常,您的测试用例必须捕获它
我是这样写的:
public Fraction divide(Fraction other ) throws FractionDivideByZeroException
你能告诉我们你对你的代码有什么期望吗?(注意,你似乎在允许
新分数(1,0)
。你可能应该在构造函数中检查它。而且0/1/0/1可能不应该给出0/0。)你能告诉我们你对你的代码有什么期望吗?(注意,你似乎在允许新分数(1,0)
。您可能应该在构造函数中检查这一点。而且0/1/0/1可能不会给出0/0。)