You need to enable JavaScript to run this app. Java数组条件匹配存储功能异常 输出为[I@7a8ce1e1
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.07 15:36:10