Java实现数列缺失数查找时,数列和计算代码报错求助
解决数列缺失数字计算中的代码错误
嘿,我一眼就揪出你代码里的问题啦!
首先看你报错的那行:
total = [n/2*(a+l)]; ............................(1)
这行的语法错误特别明显:在Java里,方括号[]是用来操作数组(比如访问元素、声明数组类型)的,根本不能用来包裹数学表达式。你想用它来强调运算优先级完全没必要,直接去掉方括号就能解决语法报错的问题。
不过别急,还有个隐藏的坑——整数除法的精度丢失问题:
你的数组是{1,2,...,13},长度n=13,如果按照n/2*(a+l)的顺序计算,Java的整数除法会直接舍弃小数部分,13/2会得到6,然后6*(1+13)=84,但正确的数列总和应该是13*(1+13)/2=91,这样计算出来的结果会直接出错,导致你找不到正确的缺失数字。
修正后的完整代码
public class Missing { public static void main(String[] args) { int ar [] = {1,2,3,4,5,6,7,8,9,10,11,12,13}; int sum = 0; int total=0; for(int num: ar) { sum = sum+num; } int n = ar.length; int a = ar[0]; int l = ar[ar.length-1]; // 修正两点:去掉方括号,调整运算顺序避免整数除法精度丢失 total = (a + l) * n / 2; System.out.print("The missing number is "+(total - sum)); // 这里要注意:你原来写反啦!应该是完整总和减去数组元素和 } }
额外小提醒
你原来的输出语句里写的是sum-total,这逻辑是反的!total是完整数列的总和,sum是当前数组的元素和,缺失的数字应该是total - sum,这点一定要修正哦。
内容的提问来源于stack exchange,提问作者DoubleDown
相关产品推荐
相关产品推荐

