Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:异常处理-我的catch()有问题_Java_Exception Handling_Compiler Errors - Fatal编程技术网

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。)