2012-03-31 83 views
0

我在asp中創建了一個Sudoku拼圖,我在某些類中遇到了麻煩。當我創建一個函數來顯示文本框中的所有數字時,出現此錯誤:對象引用未設置爲對象的實例。我知道這意味着我的對象是null,但這是我的代碼。我得到錯誤的那一行是這樣一行:stbNumber.setNumber(currentSolution [3 * i + m,3 * k + n]);對象引用未設置爲對象的實例 - 但它是?

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(); 
} 

我已經初始化stbNumber在我的代碼的最頂部,我已經確保currentSolution不是null或空。因此我不確定我做錯了什麼。我還應該提到,我在其他地方有這個確切的代碼來生成新的難題,它的工作原理很好,但是當我單擊一個按鈕時,這段代碼會專門被調用。

+0

你能後,你確認currentSolution不爲空的代碼? – tjscience 2012-03-31 04:38:29

回答

0

你基本上有3種可能性:

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

  • stbNumber可能是空
  • currentSolution可能是空
  • 你試圖指數可能是空的元素 - 只是因爲currentSolution不null並不意味着該項目在該索引不爲空 - 如此新的一個或採取適當的行動
  • 因爲你新建了一個stbNumber的實例,它不可能是罪魁禍首(但它可能是) 你說你正在檢查currentSolution爲空,我沒有看到代碼,並且你從你發佈的代碼它最有可能是這裏的罪魁禍首。你可以做的是增加一個檢查是否爲NULL訪問它之前,如果你的測試失敗的地方寫一個錯誤信息:

    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

    我發現了什麼是罪魁禍首。我在我的代碼的第一頁加載中調用了一個名爲puzzle的類(而不是在回發中)。然而,當我點擊使用此代碼的按鈕時,它看起來好像是拼圖對象爲空。 – 2012-03-31 06:04:06

    +0

    第一個發佈的代碼是一個在頁面加載時被調用的函數,這是在按下按鈕時調用的代碼。 – 2012-03-31 06:05:18

    +0

    box = new Box(); stb = new SudokuTextBox(); 對(INT I = 0; I <3;我++){ 爲 (INT K = 0; k <3; k ++){ 盒 = puzzle.getItem(I,K); 對(INT米= 0; m <3之米++){ 爲 (INT N = 0; N <3; N ++){ STB = box.getItem(M,N); stb.setVisibility(true); } //結束爲 } //結束第三個爲 } //結束第二個爲 } //結束爲 } – 2012-03-31 06:06:04

    相關問題