![](/img/trans.png)
[英]Java - How to generate a 2D Array with random ints, where the grid size is N*N (User Input)?
[英]How to verify if a 2D array/grid is n^2*n^2
如何验证二维数组是否为2 * n 2网格? 基本上验证其对于Sudoku的有效网格。 因此,应该是4 * 4(2 2 * 2 2 )网格,以及9 * 9(3 2 * 3 2 )。 我想我应该考虑数组每个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中的array[][]
可以具有不同的行大小这一事实,最好检查每一行:
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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.