问题描述
我已经写了一个科学计算器的Java代码,也为它写了jUnit测试。以下是计算cubeRoot的方法。
public <T> Double cubeRoot(T number){
Double result= Math.cbrt((Double)number);
return Math.abs(result);
}
方法返回正确的结果整数和双精度类型,但是当我为十进制调用方法时,参数传递的是双精度类型。以下是上述方法的JUINT测试。
public void testCalculateCubeRootWhenNegative(){
Integer number=-64;
assertEquals(-4.0,sci.cubeRoot(number));
}
public void testCalculateCubeRootOfdecimal(){
Double number=0.40;
assertEquals(0.736,sci.cubeRoot(number));
}
这是我正在使用的界面
public interface iScientific extends iMaths {
<T>Double squareRoot(T number);
<T>Double cubeRoot(T number);
无法找到解决方法以获取错误“ java.lang.ClassCastException:java.lang.Integer无法转换为java.lang.Double”
1楼
您正在尝试执行以下操作:
Integer i = Integer.valueOf(0);
Double d = (Double) i;
这不起作用,因为i
不是Double
的实例。
我建议将您的cubeRoot
方法更改为接受 ( Integer
和Double
的基类):
public Double cubeRoot(Number number) {
Double result = Math.cbrt(number.doubleValue());
return Math.abs(result);
}
2楼
再次,我做了一些更多的代码更改,以使代码无错误,因为最初的错误仍然存??在。请检查我所做的更正,并建议对代码进行更多的重构。
public Double cubeRoot(Number number){
DecimalFormat df=new DecimalFormat("#.####");
double result= Math.cbrt(number.doubleValue());
return Double.valueOf(df.format(result));
}
并通过了以下测试。
public void testCalculateCubeRootWhenNegative(){
Integer number=-64;
assertEquals(-4.0,sci.cubeRoot(number));
}
public void testCalculateCubeRootOfdecimal(){
Double number=0.40;
assertEquals(0.7368,sci.cubeRoot(number));
}