在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); } } }