Java 如何在不越界的情况下修复此2D数组循环

Java 如何在不越界的情况下修复此2D数组循环,java,arrays,loops,indexoutofboundsexception,Java,Arrays,Loops,Indexoutofboundsexception,我必须编写包含4个参数的代码(tic tac趾板的行、列、行增量和列增量),这些参数将在tic tac趾板中移动,并返回给定行和列中符号的最高序列 我知道我的代码是错误的,因为它不能区分应该返回2和3的实例(它返回2而不是3),但是经过一整天的尝试,我想到了所有可能的事情,我尝试的大多数修复只会使它更加复杂,同时导致测试返回越界异常错误 有谁能给我一些建议,我该如何着手解决这个问题 public int getMaxSequence(int row, int column, int dr, in

我必须编写包含4个参数的代码(tic tac趾板的行、列、行增量和列增量),这些参数将在tic tac趾板中移动,并返回给定行和列中符号的最高序列

我知道我的代码是错误的,因为它不能区分应该返回2和3的实例(它返回2而不是3),但是经过一整天的尝试,我想到了所有可能的事情,我尝试的大多数修复只会使它更加复杂,同时导致测试返回越界异常错误

有谁能给我一些建议,我该如何着手解决这个问题

public int getMaxSequence(int row, int column, int dr, int dc, char symbol) {
    int maxSequence = 0;
    List<Integer> sequence = new ArrayList<Integer>();
    sequence.add(0);

    for (int i = row, j = column; i <getBoard().length-1 && j < getBoard()[i].length-1; i = i+dr, j = j + dc){
        if (this.board[i][j].getSymbol()== symbol && this.board[i+dr][j+dc].getSymbol()!= symbol){
            sequence.add(1);
        }
        else if (this.board[i][j].getSymbol()== symbol && this.board[i+dr][j+dc].getSymbol()== symbol){
            sequence.add(2);
        }
        else if (this.board[i][j].getSymbol()== symbol && this.board[i+dr][j+dc].getSymbol()== symbol 
                && this.board[i+dr+dr][j+dc+dc].getSymbol()== symbol){
            sequence.add(3);
        }

        maxSequence = Collections.max(sequence);

        if (isWithinBounds( row+dr, column+dc)!=true){
            return Collections.max(sequence);}
        }
        return Collections.max(sequence);
    }
}

您将获得一个
索引AutofBoundsException
,因为您只在循环测试中测试范围的上半部分:

for (int i = row, j = column;
    i <getBoard().length-1 && j < getBoard()[i].length-1;
    i = i+dr, j = j + dc)
因此,您需要检查索引是否大于或等于零,否则当索引减少到-1时将出现异常

for (int i = row, j = column;
    i >= 0 && j >= 0 && i < getBoard().length && j < getBoard()[i].length;
    i += dr, j += dc)
for(int i=行,j=列;
i>=0&&j>=0&&i

此外,上限范围检查应小于长度或小于或等于长度减1,但不小于长度减1,否则将排除最后一个元素。

问题必须是独立的。粘贴链接在将来可能行不通,如果没有相关代码,问题将变得毫无价值。这就是我在你的问题中添加代码的原因。
assertEquals(2, game.getMaxSequence(1, 4, 1, -1, 'o'));
for (int i = row, j = column;
    i >= 0 && j >= 0 && i < getBoard().length && j < getBoard()[i].length;
    i += dr, j += dc)