我已经用这种方式编写代码,其中方法除法在分割两个整数后返回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();
}
}
}
答案 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
符合您的要求,那么您的代码错误,因为x
和y
是int
。您将使用当前代码获得的输出为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。