/ / Suchen Sie aus der angegebenen Zeile (x), Spalte (y) das 3x3-Subarray eines 2D-9x9-Arrays - Java, Arrays, Multidimensional-Array

Von gegebener Zeile (x), Spalte (y), finde 3x3 Unterfeld eines 2D 9x9 Arrays - Java, Arrays, multidimensionales Array

Also versuche ich, alle möglichen Einträge zu bekommendas kann in ein einzelnes Sudoku-Quadrat gesetzt werden. Ich habe ein 9x9 2D-Array, das weiter in 3x3 Subarrays unterteilt ist. Ich möchte eine Methode schreiben, die eine Zeilen- und Spaltenkombination in ihren Parametern verwendet und alle möglichen Eingaben zurückgibt, die an dieser bestimmten Position vorgenommen werden können. Die ersten 2 for-Schleifen meiner Methode nehmen alle bereits vorhandenen Nicht-Null-Werte in der gesamten angegebenen Zeile und Spalte und speichern sie in einem Array (alreadyInUse). Dies wird zu einem späteren Zeitpunkt verwendet, um herauszufinden, was passiert Nummern werden noch nicht verwendet. Die dritte for-Schleife sollte unter Verwendung der Zeilen- und Spaltenkombination das spezifische Subarray finden und dessen Einträge zum alreadyInUse-Array hinzufügen.

Gibt es eine Möglichkeit, die Zeile, Spalte des Subarrays mithilfe der angegebenen Zeile, Spalte des 2D-Arrays zu finden?

    // Method for calculating all possibilities at specific position
public int[] getPossibilities(int col, int row){
int [] possibilities;
int [] alreadyInUse = null;
int currentIndex = 0;
if(sudoku[row][col] != 0){
return  new int[]{sudoku[col][row]};
}
else{
alreadyInUse = new int[26];
//Go into Row x and store all available numbers in an alreadyInUse
for(int i=0; i<sudoku.length; i++){
if(sudoku[row][i] !=0){
alreadyInUse[currentIndex] = sudoku[row][i];
currentIndex++;
}
}
for(int j=0; j<sudoku.length; j++){
if(sudoku[j][col] !=0){
alreadyInUse[currentIndex] = sudoku[j][col];
currentIndex++;
}
}
for(int k=...???

}
return possibilities;
}

Antworten:

2 für die Antwort № 1

Mit dem Modul können Sie das Sub-Array herausfiltern. Eine Möglichkeit wäre beispielsweise, den Ausdruck zu verwenden n - (n % 3). Wenn die Zeile beispielsweise Spalte 8 ist (die letzte Spalte in einem mit 0 indizierten Array), gibt dieser Ausdruck 6 zurück ebenfalls Geben Sie 6 für Spalte 6 zurück, aber es wird 3 für Spalte 5 zurückgegeben.

Sobald Sie die obere linke Zelle haben, können Sie alle 9 Zellen mit einer verschachtelten Schleife nacheinander durchlaufen.

Hier ist der relevante Code:

int x_left = (row - (row % 3));
int y_top = (col - (col % 3));
for(int i=0; i<3; i++) {
for(int j=0; j<3; j++) {
if(sudoku[i + x_left][j + y_top] != 0) {
alreadyInUse[currentIndex] = sudoku[i + x_left][j + y_top];
currentIndex++;
}
}
}