我为科学计算器编写了一个java代码,并为它编写了jUnit测试.Below是计算cubeRoot的方法.
public <T> Double cubeRoot(T number){
Double result= Math.cbrt((Double)number);
return Math.abs(result);
}
Run Code Online (Sandbox Code Playgroud)
方法返回正确的结果整数和double类型,但是当我调用十进制方法时,参数i pass是double类型.以下是上述方法的JUint Test.
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));
}
Run Code Online (Sandbox Code Playgroud)
这就是我正在使用的界面
public interface iScientific extends iMaths {
<T>Double squareRoot(T number);
<T>Double cubeRoot(T number);
Run Code Online (Sandbox Code Playgroud)
无法找到获取错误的解决方案"java.lang.ClassCastException:java.lang.Integer无法强制转换为java.lang.Double"
你正在尝试做这样的事情:
Integer i = Integer.valueOf(0);
Double d = (Double) i;
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为i它不是一个实例Double.
我建议改变你的cubeRoot方法来接受一个Number(两者的基类Integer和Double):
public Double cubeRoot(Number number) {
Double result = Math.cbrt(number.doubleValue());
return Math.abs(result);
}
Run Code Online (Sandbox Code Playgroud)