Как я могу решить java.lang.ArrayIndexOutOfBoundsException ошибку в Java - PullRequest
0 голосов
/ 23 октября 2018

Я решаю задачу по созданию алгоритма.

Есть игра земли.Игра Land of Landing состоит из 4 рядов в общей сложности N рядов с оценками во всех столбцах.Отступая от первого ряда вниз на один ряд, вы должны ступить на один из четырех квадратов каждого ряда.
Однако существует специальное правило, которое нельзя повторить в одном ряду при посадке одного ряда ввремя.

Например,

|1 |2 |3 |5 |

|5 |6 |7 |8 |

|4 |3 |2 |1 |

Если вы перешли со строки 1 по строку 4 (5), вы не можете перейти по строке 4 (8) в строку 2.

Я пытался использовать динамическое программирование в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 ++?

Подскажите, пожалуйста, как я могу решить эту ошибку?

1 Ответ

0 голосов
/ 23 октября 2018

dp[i-1][k] - i начинается с нуля в верхнем цикле, поэтому результаты этого выражения становятся индексом -1.

Индекс массива Java начинается с нуля, а не -1, поэтому ArrayIndexOutOfBoundsException.

Я не знаю бизнес-кейса, но один из способов решить эту проблему - начать сначала цикл с 1 вместо 0.

...