所以我试图在Java中创建二次方程的函数,但是我得到的错误是我应该返回一个double。我究竟做错了什么?
double quad(double a, double b, double c){
double x;
double y;
x = (-b + Math.sqrt(b*b - 4*a*c))/(2*a);
y = (-b - Math.sqrt(b*b - 4*a*c))/(2*a);
if(!Double.isNaN(x)&&!Double.isNaN(y)){
if (x>=y) return x;
else if (y>=x) return y;
}
else if(Double.isNaN(x)&&!Double.isNaN(y)) return y;
else if(!Double.isNaN(x)&&Double.isNaN(y)) return x;
else {
System.out.println("Value is unspecified");
return null;
}
}
答案 0 :(得分:1)
您将返回null。
原始类型不允许使用Null。
如果要返回“null”,则必须使用Double。
答案 1 :(得分:1)
您无法从返回类型为基本类型的方法(此处为null
)返回double
。你应该在这里处理这种情况的方式有例外。
答案 2 :(得分:0)
没有if
%macro m_to_array(list, n);
*optionally - if you want to not specify n;
%let n = %sysfunc(countw(&&&list));
%do _i = 1 %to &n;
%global &list.&_i.;
%let &list.&_i. = %scan(&&&list.,&_i.);
%end;
%mend m_to_array;
%m_to_array(namelist);
%put _global_;
在最后的其他地方
else return y;
答案 3 :(得分:0)
您不能将null
作为双精度值返回。
或者,即使程序将其用作解决方案,也可以返回-1或0。
您可能想抛出一个异常来向程序显示出问题了。
throw new IllegalArgumentException("No solution");
使用该功能时,您可以说:
try {
double root = quad(a, b, c);
} catch (IllegalArgumentException e) {
//No solution
}
有关更多信息,您可以检出此How to solve quadratic equations in java