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