java - AoC 第 8 天问题(Java)
问题描述
我试图解决一个编程圣诞节问题,你可以在这里阅读:代码第 8 天出现
我使用 Java 来解决这个问题,所以我有以下函数,其中list
每个索引包含输入文件的一个操作:
public int calculate_P1() {
boolean[] config = new boolean[list.size()];
int acc=0;
for (int i = 0; i < list.size(); i++) {
if (list.get(i).substring(0, 3).equals("nop")) {
if (config[i] == true) break;
config[i] = true;
continue;
}
if (list.get(i).substring(0, 3).equals("acc")) {
if (config[i] == true) break;
config[i] = true;
if (list.get(i).charAt(4) == '+') acc += Integer.parseInt(list.get(i).substring(5));
if (list.get(i).charAt(4) == '-') acc -= Integer.parseInt(list.get(i).substring(5));
continue;
}
if (list.get(i).substring(0, 3).equals("jmp")) {
if (config[i] == true) break;
config[i] = true;
if (list.get(i).charAt(4) == '+') i += (Integer.parseInt(list.get(i).substring(5)));
if (list.get(i).charAt(4) == '-') i -= (Integer.parseInt(list.get(i).substring(5)));
i--;
}
}
return acc;
}
这可以正确解决示例输入,但是输入文件要长得多,我得到261
的输出应该是1179
......我做错了什么?
解决方案
问题是这两个语句jmp
:
if (list.get(i).charAt(4) == '+') i += (Integer.parseInt(list.get(i).substring(5)));
if (list.get(i).charAt(4) == '-') i -= (Integer.parseInt(list.get(i).substring(5)));
如果语句是jmp +443
(我输入中的第一个跳转语句)第一行已经更改i
,然后第二行if
不再检查jmp +443
语句的操作数,它会检查跳转目标的操作数。
根据我的输入,第一个跳转目标处的指令是acc -1
,这意味着第二个 if 语句也被评估,这意味着新i
的计算错误。
更好的解决方案是使用if / else if
组合:
if (list.get(i).charAt(4) == '+')
i += (Integer.parseInt(list.get(i).substring(5)));
else if (list.get(i).charAt(4) == '-')
i -= (Integer.parseInt(list.get(i).substring(5)));
然而,最简单的解决方案是让Integer.parseInt()
照顾+
和-
标志:
i += Integer.parseInt(list.get(i).substring(4));
(这也可以应用于“acc”案例......)
推荐阅读
- tensorflow - 如何使用 tensorboard 分析 keras 预测调用
- javascript - 与 DOM 事件相比,rxjs Observable 有哪些优势?
- android - RetroFit 发送 POST 请求失败
- python - 如何使用 Python 过滤列中的特定字符串?
- reactjs - 如何在事件发生后触发 React Hooks
- cakephp - 在 cakephp3.8 的输入字段下方显示验证错误
- java - 为什么我的简单 gui 不能在 Dr Java 中编译?我得到不正确的格式?
- r - 根据值范围向列添加/合并/变异值
- data-warehouse - 如何根据 Snowflake 中的表达式定义集群键?
- python - Python - 使用 pyinstaller 构建的 .exe 中的自定义 matplotlib 样式