如何解决java中的java.lang.ArrayIndexOutOfBoundsException错误

如何解决java中的java.lang.ArrayIndexOutOfBoundsException错误,java,algorithm,dynamic-programming,indexoutofboundsexception,Java,Algorithm,Dynamic Programming,Indexoutofboundsexception,我正在解决一个关于制作算法的挑战 有一场土地游戏。 登陆之地游戏共有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

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

有一场土地游戏。 登陆之地游戏共有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;
   }
}
import java.lang.Math;
导入java.util.*;
类解决方案{
int[]dp=新int[100001][4];
int解决方案(int[][]土地){
int r=陆地长度;
对于(int i=0;i<4;i++)
{
dp[0][i]=土地[0][i];
}

对于(int i=0;i
dp[i-1][k]
-
i
在上循环中从零开始,因此此表达式的结果变为-1作为索引

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


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

Java数组是基于零的!这就是为什么我应该在所有条件语句中将“0”更改为“1”的原因?如果您看到一个结果索引为-1的条件,那么这些条件应该更改。在j&K上没有减法操作,因此它可能永远不会发生BE 1。但是请注意我的SET索引到1的建议,因为如果源数组在索引0中有数据,那么您可能会丢失数据。您的数据和业务需求决定了确切的解决方案。祝您好运!请不要使用java代码的片段。代码段仅适用于JavaScript /HTML/CSS代码。如果C++中的代码工作得“好”,则可能是R。读取已分配数组之外的数据,这本质上是一个缓冲区溢出类型错误。