当前位置: 首页 > 知识库问答 >
问题:

交叉匹配二维阵列

萧芷阳
2023-03-14

试图实施更大规模的井字游戏

这个游戏可以有超过3行和3列

每当发现4个连续的模式(水平,垂直或交叉)

选手是赢家

我已经找到了水平和垂直匹配的实现方法

但是找不到一种方法来识别2d数组中某个字符的交叉模式

考虑下面的二维数组

`

        char[][] char2d={
            {'*','o','o','*'},
            {'o','*','o','o'},
            {'o','o','*','o'},
            {'o','o','o','*'}
    }

`

如何检查“*”字符在这个2d数组中是否有四个连续的交叉模式

共有3个答案

胡天佑
2023-03-14

您可以使用IntStream检查对角线是否只有“*”

public static boolean checkDiagonals(char[][] arr) {
    int dimension = arr.length;
    return IntStream.range(0, dimension)
            .allMatch(i -> arr[i][i] == '*') 
    || IntStream.range(0, dimension)
            .allMatch(i -> arr[i][dimension - i - 1] == '*');
}
谷梁楚青
2023-03-14

另一个...

  public static void main(String[] args) {       
    char[][] char2d={
      {'*','o','o','*'},
      {'o','*','o','o'},
      {'o','o','*','o'},
      {'o','o','o','*'}
    };
    System.out.println(hasCross(char2d, '*'));
  }

  public static boolean hasCross(char[][] board, char c) {
    // Assumes a SQUARE board!
    boolean crossA = true;
    boolean crossB = true;
    for(int col=0, rowA=0, rowB=(board.length-1); col<board.length; col++, rowA++, rowB--) {
      if (board[rowA][col]!=c) {
        crossA = false;
      }
      if (board[rowB][col]!=c) {
        crossB = false;
      }
    }
    return crossA || crossB;
  }
樊杰
2023-03-14

如果给定的起始位置是长度s充满字符c的向下对角线(如图中所示,从左到右前进),则此函数返回true

public static void isFullDownDiagonal(char[][] board, 
         int startCol, int startRow, int s, char c) {

   for (int i=0; i<s; i++) {
      if (board[startRow+i][startCol+i] != c) return false; 
                     //  \_ change this sign to test up diagonal         
   }
   return true;
}

只需做一点小改动,就可以测试向上的对角线。在NxN板中,左上角和下角的(N-s1)x(N-s1)区域中只能有对角线的起点。

 类似资料:
  • 因此,我想在一个泛型类列表中交叉匹配数据,其中需要检查名称与姓氏的匹配,如果存在匹配,则返回数据或返回布尔值。这是我想到的 这返回TRUE,因为我使用GETTER AND SETTER通过设置布尔值从lambda表达式返回布尔值。 所以我在寻找最简单的lambda表达式来实现这一点?请问外面有人吗。

  • 我是编程新手,我有一个任务要求从一维数组创建二维数组。我想到了这一点(没有任何外部来源的帮助,因为这会剥夺学习经验)。它适用于我们教授的测试输入,我只是想知道这是一个丑陋/低效的解决方案。 测试输入:twoDArray([1,2,3,4,5],3)输出将是:[[1,2,3],[4,5]]

  • 为什么上面的代码不起作用,我应该如何纠正?

  • 在这里,我试图实现一个具有单个隐藏层的神经网络来分类两个训练示例。该网络利用sigmoid激活函数。 各层尺寸和重量如下: 我在反向传播中遇到了一个矩阵维数不正确的问题。此代码: 返回错误: 如何计算上一层的误差? 更新: 返回错误: 是否未正确设置矩阵尺寸?

  • 我试着做一个Loto游戏,我必须生成一张随机的卡,在第一个collum数字从1-9,第二个10-19一直到90。这张牌的另一个规则是,每行的随机位置上只能有5个数字,这就是我遇到的麻烦。 我从这个开始在每个collum中添加数字: 然后在数组的每一行的一个数字位置上放5个数字我试过这样做: 第三个也一样。 输出: 0 18 0 0 46 0 61 72 88 0 18 0 31 0 55 0 0

  • 我试图将一个2d数组中的特定元素添加到另一个数组中,添加的过程是在数组的第一行选择最小的元素,并将该元素添加到同一位置的另一个2d数组中,例如: 2 22 3 5 1 54 7 3 10 20 22 21 这里,第一行中的最小元素是2,所以应该在相同的位置将2添加到另一个2d数组中,对于第二行,1是最小元素,所以我们也将1添加到另一个2d数组中,第三行中的最小元素是3,最后一行,第四行,最小的元素