You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Math.pow实现数组立方的Junit测试失败,求助错误原因

解决数组立方的代码问题

嘿,别慌!新手刚写代码遇到这种问题太正常了,咱们一起来把你的代码问题揪出来:

你的代码里有三个关键错误:

  1. 循环边界写错了
    你用了i <= array.length作为循环条件,但数组的索引是从0开始到array.length - 1结束的。比如长度为4的数组,索引只能是0、1、2、3,当i等于4的时候,访问array[4]就会触发数组越界异常,而且逻辑上也完全没必要走到这个索引。正确的条件应该是i < array.length。

  2. 你计算的是索引的立方,不是数组元素的立方
    代码里Math.pow(i,3)是在算循环变量i的立方,而不是数组里对应位置array[i]的立方!比如测试用例里第一个数组的第二个元素是2(索引1),你算的是1的立方(等于1),但实际需要的是2的立方(等于8),这就是测试失败的核心原因。

  3. 没有把计算结果存回原数组
    你只是定义了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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:15:46