Java实现数组元素减法运算输出结果不符合预期问题咨询
代码问题分析
你给出的代码运行结果不符合预期,核心是计算逻辑和绝对值使用错误,具体原因如下:
- 首先明确你的预期计算规则:从你给出的测试用例
{13,17,14}对应预期输出(0,4,-16)可反推,你需要的逻辑是:- 数组第0位固定输出0
- 第j位(j≥1)的结果 = 第j位的元素值,减去它前面所有元素的和
- 你的代码存在3个核心错误:
- 每步减法后多余的绝对值转换:你在内层循环中每次计算
temp后都调用了Math.abs(temp),会把所有负数转为正数,直接导致不可能得到-16这类负数结果。 - 计算逻辑完全不匹配:你代码中
temp初始值为0,且内层循环从j位开始依次减到0位,等价于计算的是| | |0 - numbers[j]| - numbers[j-1] | ... - numbers[0]|,和你预期的「当前元素减前面所有元素和」的逻辑完全不符。以j=2为例,你的代码计算过程是:| | |0-14| -17| -13| = 10,就是你实际得到的结果。 - 冗余无效判断:内层循环的
if(i > numbers.length-1) break没有任何作用,i从j递减到0,j最大为数组长度-1,i不可能超过数组下标上限。
- 每步减法后多余的绝对值转换:你在内层循环中每次计算
修复后代码
List<Double> list2 = new ArrayList<Double>(); double[] numbers= {13,17,14}; // 第0位固定加0 list2.add((double)0); for(int j = 1; j < numbers.length; j++) { // 初始值设为当前j位的元素值 double temp = numbers[j]; // 依次减去前面所有0到j-1位的元素 for (int i = 0; i < j; i++) { temp -= numbers[i]; } list2.add(temp); } System.out.println("Answer --> "+list2);
运行后输出为Answer --> [0.0, 4.0, -16.0],符合你的预期。
内容的提问来源于stack exchange,提问作者Uday Surse
相关产品推荐
相关产品推荐

