当我试图在try块中进行类型转换时,为什么我的java代码失败了?

时间:2015-07-29 16:48:31

标签: java try-catch division typecasting-operator

我已经用这种方式编写代码,其中方法除法在分割两个整数后返回double值。如果我不包含try catch块,它工作正常。但是当我在try块中包含类型转换的整数除法时如图所示下面,它会导致编译问题......请解决我的问题。

import java.util.Scanner;

class Division {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        Division div=new Division();
        System.out.println("Enter the two numbers to perform division operation:");
        int x=sc.nextInt();
        int y=sc.nextInt();
        div.division(x,y);
    }

    public double division(int x,int y){
        try{
            double z=(double)(x/y);
            return z;
            }
        catch(ArithmeticException ae){
            ae.printStackTrace();
        }
    }

}

4 个答案:

答案 0 :(得分:1)

您的方法必须有return声明。

如果当前代码进入return阻止,则您的当前代码没有catch声明。

试试这段代码。

import java.util.Scanner;

public class Division {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Division div = new Division();
        System.out.println("Enter the two numbers to perform division operation:");
        int x = sc.nextInt();
        int y = sc.nextInt();
        div.division(x, y);
    }

    public double division(int x, int y) {
        double z = 0;
        try {
            z = (double) (x / y);
        } catch (ArithmeticException ae) {
            ae.printStackTrace();
        }
        return z;
    }

}

现场演示here

另外我猜你的打字方式会有数据丢失 如果17/3 = 5.6666666符合您的要求,那么您的代码错误,因为xyint。您将使用当前代码获得的输出为17/3=5

而不是 z = (double) (x / y); ,您需要 z = (double) x / (double) y;

答案 1 :(得分:1)

您在分区功能中缺少一个回报。通过捕获异常,你说你会在遇到问题的情况下做一些事情来处理它,并且会在之后继续执行。

最好在这里抛出异常,因为如果你除以零则没有任何东西可以返回。或者你可以返回一些无意义的东西,如-1

public double division(int x,int y){
    try{
        double z=(double)(x/y);
        return z;
        }
    catch(ArithmeticException ae){
        ae.printStackTrace();
    }
    return -1;
}

更好的解决方案是在除数为0时抛出异常然后在任何地方处理它

public double division(int x, int y) throws ArithmeticException {
        if (y == 0)
            throw new ArithmeticException("Cannot divide by 0");
        double z = (double) (x / y);
        return z;
    }

答案 2 :(得分:1)

您的方法错过了return语句。试试这个

 public double division(int x,int y){
        double z=0.0;
        try{
             z=(double)(x/y);

        }
        catch(ArithmeticException ae){
            ae.printStackTrace();
        }
        return z;
    }

答案 3 :(得分:1)

问题是,如果你的try块失败,那么找不到return语句(因为你提供的返回只是try块的本地)。

正如其他人指出的那样,你可以在try和catch块(但仍然在方法中)返回一些东西(例如-1)之外,  或者你也可以在catch块中有一个return语句,所以即使try抛出异常,你的方法仍会返回一个double。