Java数组条件匹配存储功能异常 输出为[I@7a8ce1e1
问题排查与修正
输出[I@7a8ce1e1的原因
Java数组是引用类型,直接调用System.out.println(数组变量)时,会继承Object类的默认toString()实现,输出格式为「数组类型标识@十六进制内存哈希值」,[I就代表当前是int型一维数组,并非数组的实际存储内容。
要正常输出数组元素,修改Tester类的打印语句即可:
// 导入java.util.Arrays后直接调用 System.out.println(Arrays.toString(result));
代码逻辑现存Bug
就算解决了打印格式问题,当前代码的运行结果也不符合预期,核心问题有以下几个:
- 入参数组被原地篡改:计算数字各位乘积的循环里,直接修改了
inIntArr1[i]的原值,原本的元素比如26会被循环整除操作改成0,后续存入结果数组的都是错误值。应该新建临时变量存储原数字,不能直接修改传入的数组元素。 - 乘积变量未重置:
pro变量仅在方法开头初始化为1,每次计算完一个数字的各位乘积后没有重置回1,下一次计算时会沿用之前的乘积结果,导致判断完全失效。必须在每次计算新数字的各位乘积前,将pro重置为1。 - 第三项判断条件逻辑错误:
else if(inIntArr1[inIntArr1.length-1]==inIntArr2[inIntArr2.length-1])是拿两个数组的最后一个元素做全局判断,只要这个条件成立,双层循环里所有inIntArr1的元素不管是否符合规则,都会被存入结果数组,完全偏离判断逻辑。 - 结果数组存在冗余空值:初始化的
outIntArr长度和inIntArr1完全一致,实际符合条件的元素数量远小于数组长度,返回的数组后段会填充大量默认值0,建议用动态集合存储符合条件的元素,最后再转成数组返回,避免冗余值。 - 平方判断存在精度风险:
Math.pow()返回double类型,直接和int值做相等比较时,较大数值可能出现浮点精度误差,建议改成直接计算inIntArr1[i] * inIntArr1[i]做整数比较,避免精度问题。
内容的提问来源于stack exchange,提问作者jarvis
相关产品推荐
相关产品推荐

