如何在 Java 中解决 java.lang.ArrayIndexOutOfBoundsException 错误



我正在解决一个关于制作算法的挑战。

有一场土地游戏。 登陆之地游戏由 4 行组成,共 N 行,所有列都有分数。 从第一排走下来时,下了一排,你必须在每排的四个方块之一上踩下。
但是,有一个特殊规则,一次登陆一行时不能在同一行中重复。

例如

|1 | 2 | 3 | 5 |

|5 | 6 | 7 | 8 |

|4 | 3 | 2 | 1 |

如果您已经踩过1号线到4号线(5(,则不能踩到2号线的4号线(8(。

我试图在Java中使用动态编程。

import java.lang.Math;
import java.util.*;
class Solution {
int [][] dp = new int[100001][4];
int solution(int[][] land) {
int r = land.length;
for (int i = 0; i < 4; i++)
{
dp[0][i] = land[0][i];
}
for (int i = 0; i <r; i++)
{
for (int j = 0; j < 4; ++j)
{
for(int k = 0; k < 4; ++k)
{
if (j != k)
{
dp[i][j] = Math.max(dp[i][j], land[i][j] + dp[i-1][k]);
}
}
}
}
int ans = 0;
for (int i = 0; i < 4; ++i)
{
ans = Math.max(ans, dp[r-1][i]);
}
return ans;
}
}

它显示错误

java.lang.ArrayIndexOutOfBoundsException: -1

我在想可能是条件语句有问题。

在C++中,这些条件语句是正确的。它运行完美。为什么我在 Java 中遇到错误?Java 和 C++ 之间使用数组有什么区别吗?

你能告诉我如何解决这个错误吗?

>dp[i-1][k]-i从上层循环中的零开始,因此此表达式的结果变为 -1 作为索引。

Java 数组索引从零开始,而不是 -1,这就是ArrayIndexOutOfBoundsException的原因。

我不知道商业案例,但解决这个问题的一种方法是,首先从 1 而不是 0 开始循环。

相关内容

最新更新