在Java中对角地查找5行值
我有这个10x10arrays:
private static int[][] intersections = new int[10][10];
我正在使用此代码来查找水平行中是否有5个值:
public static int horizontalCheck() { String horizontal = ""; for (int i = 0; i < intersections.length; i++) { for (int j = 0; j < intersections[i].length; j++) { horizontal += Integer.toString(intersections[i][j]); } if (horizontal.indexOf("11111") != -1) { // White wins. return 1; } else if (horizontal.indexOf("22222") != -1) { // Black wins. return 2; } horizontal = ""; } return 0; }
和类似的代码垂直地做。 但我的问题是,我怎么能找到对角线上是否有5个值? 电路板尺寸为10×10,对角线可以在电路板上的任何位置。 如果您有任何疑问或需要有关代码的更多信息,请务必询问。
我建议你为此编写一个辅助函数。 该函数应该采用以下参数:
-
r0
– 检查需要开始的起始行 -
c0
– 需要从中开始检查的起始列 -
dr
–{-1, 0, 1}
的垂直步长 -
dc
– 从{-1, 0, 1}
的水平步长 -
len
– 要查找的项目数 -
num
– 要查找的数字。
以下是此函数的外观:
private static boolean checkRow(int r0, int c0, int dr, int dc, int len, int num) { for (int k = 0 ; k != len ; k++) { int r = r0 + k*dr; int c = c0 + k*dc; if (r < 0 || c < 0 || r >= intersections.length || c > intersections[r].length || intersections[r][c] != num) { return false; } } return true; }
有了这个function,您可以在任何方向检查连续的len
项目:
// See if we've got five eights in any direction: for (int r = 0 ; r != intersections.length ; r++) { for (int c = 0 ; c != intersections[r].length ; c++) { if (checkRow(r, c, 0, 1, 5, 8)) { System.out.println("Horizontal, starting at "+r+" " +c); } if (checkRow(r, c, 1, 0, 5, 8)) { System.out.println("Vertical, starting at "+r+" " +c); } if (checkRow(r, c, 1, 1, 5, 8)) { System.out.println("Diagonal descending right, starting at "+r+" " +c); } if (checkRow(r, c, 1, -1, 5, 8)) { System.out.println("Diagonal descending left, starting at "+r+" " +c); } } }