2011-01-13 4 views
1

Ich habe ein Problem mit dem Erstellen eines zufälligen Sudoku-Rasters. Ich habe versucht, ein rekursives Muster zu modifizieren, mit dem ich das Rätsel gelöst habe. Das Puzzle selbst ist ein zweidimensionales Integer-Array. Das ist, was ich habe (. Übrigens, das Verfahren nicht nur die erste Zeile zufällig hatte ich eine Idee die erste Reihe randomisieren, entschied sich dann einfach das ganze Gitter zu tun):Sudoku-Rekursionsproblem (Java)

public boolean randomizeFirstRow(int row, int col){ 
    Random rGen = new Random(); 

    if(row == 9){ 
     return true; 
    } 
    else{ 
     boolean res; 
     for(int ndx = rGen.nextInt() + 1; ndx <= 9;){ 

      //Input values into the boxes 
      sGrid[row][col] = ndx; 
      //Then test to see if the value is valid 
      if(this.isRowValid(row, sGrid) && this.isColumnValid(col, sGrid) && this.isQuadrantValid(row, col, sGrid)){ 
       // grid valid, move to the next cell 
       if(col + 1 < 9){ 
        res = randomizeFirstRow(row, col+1); 
       } 

       else{ 
        res = randomizeFirstRow(row+1, 0); 
       } 

       //If the value inputed is valid, restart loop 
       if(res == true){ 
        return true; 
       } 
      } 
     } 
    } 

    //If no value can be put in, set value to 0 to prevent program counting to 9 
    setGridValue(row, col, 0); 
    //Return to previous method in stack 
    return false; 
} 

Diese Ergebnisse in einer ArrayIndexOutOfBoundsException mit einer lächerlich hohen oder niedrigen Zahl (+ - 100.000). Ich habe versucht, zu sehen, wie weit es in dem Verfahren geht, und es geht nie über diese Linie:

if(this.isRowValid(row, sGrid) && this.isColumnValid(col, sGrid) && this.isQuadrantValid(row, col, sGrid)) 

Ich verstehe nicht, wie die Array-Index so hoch geht. Kann mir jemand helfen?

Antwort

3
for(int ndx = rGen.nextInt() + 1; ndx <= 9;){ 

Das sieht verdächtig aus. Random.nextInt() gibt eine zufällige Ganzzahl innerhalb des ganzen Bereichs der Ganzzahl zurück, nicht nur von 0 bis 9.

+0

Wow .. Ich habe vergessen, Parameter hinzuzufügen. Ich bin bemerkenswert dumm. – SkylineAddict

+0

Okay, also habe ich das behoben, aber es gibt nur Nullen zurück. Ich sah auf einem Brett, dass ich zufällige Indizes anstelle von zufälligen Eingabewerten verwenden soll. Wenn es nicht zu viel verlangt ist, könntest du mir zeigen, wie ich das umsetzen kann? Vielen Dank. – SkylineAddict

+0

Ich verstehe nicht, was Sie fragen, Sie müssen genauer sein. –

0

Sie werden dies wollen.

public int nextInt (int n) Rückgabe: ein Pseudozufall, gleichmäßig verteilt Int-Wert zwischen 0 (inklusive) und n (exklusiv).