2012-03-31 5 views
0

Ich erstelle ein Sudoku Puzzle in asp und ich habe Probleme mit einigen Klassen. Wenn ich eine Funktion zum Anzeigen aller Zahlen in dem Textfeld erstellen, erhalte ich diesen Fehler: Objektverweis nicht auf eine Instanz eines Objekts festgelegt. Ich weiß, dass es bedeutet, dass mein Objekt null ist, aber hier ist mein Code. Die Zeile, auf der der Fehler auftritt, lautet: stbNumber.setNumber (currentSolution [3 * i + m, 3 * k + n]);Objektreferenz nicht auf eine Instanz eines Objekts festgelegt - aber es ist?

private SudokuTextBox stb; 
private Puzzle puzzle; 
private Box box; 
private Number stbNumber; 


public void displayAll(object sender,EventArgs e) 
{ 
    puzzle = new Puzzle(); 

    for (int i = 0; i < 3; i++) 
    { 
     for (int k = 0; k < 3; k++) 
     { 
      box = new Box(); 
      for (int m = 0; m < 3; m++) 
      { 
       for (int n = 0; n < 3; n++) 
       { 
        stbNumber = new Number(); 
        stb = new SudokuTextBox(); 
        stbNumber.setNumber(currentSolution[3 * i + m, 3 * k + n]); 
        stb.setTextBoxValue(stbNumber); 
        stb.setVisibility(true); 
        box.setItem(stb, m, n); 
       }// end forth for 
      }//end third for 
      puzzle.setItem(box, i, k); 
     }//end second for 
    }//end first for 
    generateBoxes(); 
} 

Ich habe stbNumber an der Spitze von meinem Code initialisiert, und ich habe dafür gesorgt, dass currentSolution nicht null oder leer ist. Ich bin mir daher unsicher, was ich falsch mache. Ich sollte auch erwähnen, dass ich diesen Code woanders habe, um neue Rätsel zu erzeugen, und es funktioniert ganz gut, aber dieser Codeabschnitt wird speziell aufgerufen, wenn ich auf einen Knopf klicke.

+0

Können Sie nach dem Code, wo Sie die currentSolution nicht null stellen Sie sicher ist? – tjscience

Antwort

0

Sie haben im Wesentlichen drei Möglichkeiten:

stbNumber.setNumber(currentSolution[3 * i + m, 3 * k + n]); 

  • stbNumber konnte
  • currentSolution könnte null
  • null sein das Element Sie indizieren versuchen null sein könnte - nur weil currentSolution nicht ist null bedeutet nicht, dass der Artikel bei diesem Index nicht null ist - also neu auflegen oder entsprechende Maßnahmen ergreifen
  • Da Sie eine Instanz von stbNumber neu erstellen, ist es unwahrscheinlich, der Täter zu sein (aber es könnte sein) Sie sagen, Sie überprüfen currentSolution ist null, sehe ich nicht den Code dafür und aus dem Code, den Sie post es ist wahrscheinlich der Schuldige hier. was Sie tun können, ist eine Überprüfung auf null addieren, bevor Sie darauf zugreifen, und wenn Ihr Test irgendwo eine Fehlermeldung fehlschlägt schreiben:

    stbNumber = new Number(); 
        stb = new SudokuTextBox(); 
        if (currentSolution != null) 
        { 
         // if the item does not exist, new it up 
         if (currentSolution[3 * i + m, 3 * k + n] == null) currentSolution[3 * i + m, 3 * k + n] = new someObject() 
         stbNumber.setNumber(currentSolution[3 * i + m, 3 * k + n]); 
         stb.setTextBoxValue(stbNumber); 
        } 
        else 
        { 
         WriteSomeErrorMessage("currentSolution is null"); 
        } 
    
    +0

    Ich habe herausgefunden, was der Schuldige ist. Ich nenne eine Klasse namens Puzzle in der ersten Seite meines Codes laden (nicht in der Post zurück). Wenn ich jedoch auf die Schaltfläche klicke, die diesen Code verwendet, scheint es so, als wäre das Puzzleobjekt null. –

    +0

    Der erste eingegebene Code ist eine Funktion, die aufgerufen wird, wenn die Seite geladen wird. Dies ist der Code, der beim Drücken der Schaltfläche aufgerufen wird. –

    +0

    { Box = neue Box(); stb = neue SudokuTextBox(); for (int i = 0; i <3; i ++) { for (int k = 0; k <3; k ++) { box = puzzle.getItem (i, k); for (int m = 0; m <3; m ++) { for (int n = 0; n <3; n ++) { stb = box.getItem (m, n); stb.setVisibility (wahr); } // end for für } // Ende dritte für } // Ende Sekunde für } // Ende zuerst für } –

    Verwandte Themen