仿恩格玛机项目中数组索引与值交换的实现问题
解决数组索引与值交换(置换逆)的问题
你的代码核心问题是没有创建原数组的独立副本——origPatt = R1.Pattern只是让origPatt指向原数组的内存地址,循环中修改R1.Pattern时,origPatt的内容会同步改变,导致后续迭代使用的是已被篡改的数据,自然得不到正确的逆置换结果。
正确实现方式
必须先复制原数组的完整独立拷贝,再基于这份拷贝修改原数组:
方式一:使用Arrays.copyOf(推荐)
import java.util.Arrays; // ... int[] origPatt = Arrays.copyOf(R1.Pattern, R1.Pattern.length); for (int i = 0; i < origPatt.length; i++) { R1.Pattern[origPatt[i]] = i; }
方式二:手动循环拷贝
如果不想引入Arrays工具类,也可以手动完成拷贝:
int[] origPatt = new int[R1.Pattern.length]; for (int i = 0; i < origPatt.length; i++) { origPatt[i] = R1.Pattern[i]; } // 执行逆置换逻辑 for (int i = 0; i < origPatt.length; i++) { R1.Pattern[origPatt[i]] = i; }
验证效果
- 原数组
[0, 1, 2, 3, 4]:拷贝后origPatt与原数组一致,循环后原数组保持不变,符合预期。 - 原数组
[4, 0, 3, 1, 2]:基于独立拷贝执行循环后,原数组会被修改为[1, 3, 4, 2, 0],完全匹配你的预期结果。
内容的提问来源于stack exchange,提问作者DueroBone
相关产品推荐
相关产品推荐

