在从特定点检查一行中有多少个字符在所有方向上相同时,我遇到了一个问题。
例如,测试是:
assertEquals(2, game.getMaxSequence(0, 0, 0, 1, 'o'));
assertEquals(1, game.getMaxSequence(0, 0, 0, 1, 'x'));
我想出了如何从左上角开始做到这一点;然而,当涉及到特定点并增加参数时,我会丢失。
这是签名:
getMaxSequence(int row, int column, int dr, int dc, char symbol)
感谢您的帮助。
更新,我得到了
public int getMaxSequence(int row, int column, int dr, int dc, char symbol) {
int maxSequence = 0;
char[] rows = new char[row];
char[] columns = new char[column];
for(int i = 0; i < rows.length; i++){
for(int j = 0; j < dc; j++){
for(int k = 0; k < dr; k++){
if( rows[i] == symbol && columns[i] == symbol)
{
maxSequence++;//this should test to see if the index at this
//row is equal to what you pass it.
}
}
}
}
return maxSequence;
}
它还没有任何建议吗?
答案 0 :(得分:0)
如果您在查看时遇到问题,这是一个简单的2D数组。索引从0
到n-1
,其中n
是数组的长度。
[0][0] [0][n-1]
┌───┬───┬───┬───┐
│ │ │ │ │
├───┼───┼───┼───┤
│ │ │ │ │
├───┼───┼───┼───┤
│ │ │ │ │
├───┼───┼───┼───┤
│ │ │ │ │
└───┴───┴───┴───┘
[n-1][0] [n-1][n-1]
我们可以选择任意点(称之为p
)并通过递增/递减索引向任何方向行走(假设我们必须保持在0
到n-1
的范围内)
[x--, y--] [y--] [x++, y--]
┌───┬───┬───┬───┐
│ │ │ │ │
├───┼───┼───┼───┤
│ │ │ │ │
[x--] ├───┼───┼───┼───┤ [x++]
│ │ p │ │ │
├───┼───┼───┼───┤
│ │ │ │ │
└───┴───┴───┴───┘
[x--, y++] [y++] [x++, y++]
一旦你可以想象它,这很容易转换为循环。
char[][] arr = ... ;
// increments are -1, 0 or 1
int xIncrement = ... ;
int yIncrement = ... ;
// starting coordinates
int x = pX;
int y = pY;
while( ( y < arr.length ) && ( x < arr[y].length ) ) {
char c = arr[y][x];
// do something with c
x += xIncrement;
y += yIncrement;
}
您可以选择更复杂的语法(例如for
循环,++
,--
等),但这是一个很好的基本形式。
在我的图表p
对应于索引[2][1]
。如果我想从p
走到[0][n-1]
(“右上角”),则x
增量为+1
,y
增量为{}是-1
。