Java 如何验证二维阵列/栅格是否为n^2*n^2

Java 如何验证二维阵列/栅格是否为n^2*n^2,java,arrays,Java,Arrays,如何验证2d数组是否为n2*n2网格?基本上验证它是一个有效的数独网格。所以一个4*422*22的网格应该是真的,还有9*932*32。我猜我应该计算数组中每个D的长度,并检查它们是否为正方形。但它不可能是任何正方形。所以我的精神被卡住了。请不要只说它以前被问过,并链接一个过去的数独解算问题,因为我只是想验证它现在是否是玩数独的有效网格。我以前看到的所有问题都是验证9*9的内容,而不是检查网格的实际大小 到目前为止我只知道 public Sudoku(int[][] g) { theGrid =

如何验证2d数组是否为n2*n2网格?基本上验证它是一个有效的数独网格。所以一个4*422*22的网格应该是真的,还有9*932*32。我猜我应该计算数组中每个D的长度,并检查它们是否为正方形。但它不可能是任何正方形。所以我的精神被卡住了。请不要只说它以前被问过,并链接一个过去的数独解算问题,因为我只是想验证它现在是否是玩数独的有效网格。我以前看到的所有问题都是验证9*9的内容,而不是检查网格的实际大小

到目前为止我只知道

public Sudoku(int[][] g) {
theGrid = g;
}
private int[][] theGrid;

public boolean isValid()  {
if (theGrid.length == 0)
  return true;
if(theGrid[0].length!=theGrid[1].length)//sides arent the same length
  return false;
}

谢谢你的帮助。谢谢

您的验证功能如下所示:

public boolean isValid() {
    if ( theGrid.length == 0 ) {
        return true;
    }

    if ( theGrid.length != theGrid[ 0 ].length ) {//sides arent the same length
        return false;
    }

    final int n = theGrid.length;
    final double sqrt = Math.sqrt( n );

    return ( ( int ) sqrt ) == sqrt;

}

因此,考虑到java中的数组[]可以有不同的行大小,最好检查每一行:

static boolean isValid(int[][] array) {
    if(array.length == 0) return false;

    double sqrt = Math.sqrt(array.length);
    int x = (int) sqrt;

    if(Math.pow(sqrt,2) != Math.pow(x,2)) return false;

    return Arrays.stream(array).filter(ints -> ints.length != array.length).count() == 0;
}

它不可能是任何正方形-你是什么意思?@比如4*4和9*9是有效的,但5*5不是,我以为你是这个意思。你的措辞有点不清楚。从这一部分来看,听起来二维的长度不能是任何正方形,但你的意思是元素的总数不能是任何正方形,对吗?我见过使用6x6网格的数独游戏。e、 g.-您确定只允许n^2种尺寸吗?这个怎么样?int[][]网格=新int[9][9];网格[3]=新整数[10];这是验证的性能和准确性之间的权衡。