使用Math.pow实现数组立方的Junit测试失败,求助错误原因
解决数组立方的代码问题
嘿,别慌!新手刚写代码遇到这种问题太正常了,咱们一起来把你的代码问题揪出来:
你的代码里有三个关键错误:
循环边界写错了
你用了i <= array.length作为循环条件,但数组的索引是从0开始到array.length - 1结束的。比如长度为4的数组,索引只能是0、1、2、3,当i等于4的时候,访问array[4]就会触发数组越界异常,而且逻辑上也完全没必要走到这个索引。正确的条件应该是i < array.length。你计算的是索引的立方,不是数组元素的立方
代码里Math.pow(i,3)是在算循环变量i的立方,而不是数组里对应位置array[i]的立方!比如测试用例里第一个数组的第二个元素是2(索引1),你算的是1的立方(等于1),但实际需要的是2的立方(等于8),这就是测试失败的核心原因。没有把计算结果存回原数组
你只是定义了result变量存储计算值,但从来没把这个值赋值回array[i],所以原数组完全没有被修改,测试自然不会通过。
修正后的代码
这里给你两种写法,推荐第一种,因为整数乘法比Math.pow更可靠(避免double转int的精度问题):
public void cube(int[] array) { for (int i = 0; i < array.length; i++) { // 直接用整数乘法计算立方,安全又高效 array[i] = array[i] * array[i] * array[i]; } }
如果一定要用Math.pow,记得要针对数组元素计算,并且赋值回原数组:
public void cube(int[] array) { for (int i = 0; i < array.length; i++) { array[i] = (int) Math.pow(array[i], 3); } }
这样修改后,你的JUnit测试用例应该就能顺利通过啦!
内容的提问来源于stack exchange,提问作者user11199975
相关产品推荐
相关产品推荐

