You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

仿恩格玛机项目中数组索引与值交换的实现问题

解决数组索引与值交换(置换逆)的问题

你的代码核心问题是没有创建原数组的独立副本——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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 21:43:25