Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中按对角线查找一行中的5个值_Java - Fatal编程技术网

在Java中按对角线查找一行中的5个值

在Java中按对角线查找一行中的5个值,java,Java,我有一个10x10阵列: 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 < in

我有一个10x10阵列:

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;
}
publicstaticinthorizontalcheck(){
字符串水平=”;
对于(int i=0;i

和一个类似的代码来垂直执行。但我的问题是,我怎么能找到一行对角线上是否有5个值?电路板的尺寸为10x10,对角线可以是电路板上任何位置的双向。如果您有任何问题或需要有关代码的更多信息,请务必询问。

我建议您为此编写一个帮助函数。函数应采用以下参数:

  • 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;
}

这是什么意思?水平排列5个值。我认为使用
horizontal.contains
会更惯用。如果你知道php@Trojan.ZBOT,基本上我的意思是,这是一款Gomoku游戏,你可以在水平、垂直或对角排列的5个按钮上获胜。播放器按钮在数组中相应地表示为1和2。小点。不管交叉点的奇怪算法是什么,如果字符串连接运行多次,就不应该使用它。这是致命的无效。请改用
StringBuilder
。谢谢您的帮助。
// 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);
        }
    }
}