2012-03-31 79 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

    相关问题