我在asp中创建了一个Sudoku Puzzle,但是我遇到了一些类的问题。当我创建一个函数来显示文本框中的所有数字时,我收到此错误:对象引用未设置为对象的实例。我知道这意味着我的对象为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 :(得分:0)
你基本上有3种可能性:
stbNumber.setNumber(currentSolution[3 * i + m, 3 * k + n]);
stbNumber
可以为null 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");
}