gpt4 book ai didi

c# - 将int放入各种对象数组时得到 'NullReferenceException'

转载 作者:太空宇宙 更新时间:2023-11-03 21:37:23 24 4
gpt4 key购买 nike

作为一项学校作业,我正在尝试使用 C# 在 WinForms 中创建一个数独游戏。数独中的所有内容都必须是面向对象的,所以我没有选择像这样构建代码,老师选择了。

当我在 SudokuGUI 的文本框中放入一个数字 (int) 时,它试图将数字放入数组中但失败了,并给出了众所周知的错误:

An unhandled exception of type 'System.NullReferenceException' occurred in WindowsFormsApplication5.exe Additional information: Object reference not set to an instance of an object.

代码如下所示:

  1. 首先,当从 TextBox 释放键时,我们将数字发送到将数字放入数组的方法

    private void Valuechange_KeyUp(object sender, KeyEventArgs e)
    {

    TextBox text_box = sender as TextBox;

    var position = tableLayoutPanel1.GetPositionFromControl(text_box);

    int x = position.Row;
    int y = position.Column;

    if (int.TryParse(text_box.Text, out value) && int.Parse(text_box.Text) < 10 && int.Parse(text_box.Text) > 0 || value == 0)
    {
    add_value.Array_AddNumber(x, y, value);
    }
    else
    {
    MessageBox.Show("Skriv in en siffra mellan 1-9");
    text_box.Clear();
    }

    }
  2. 这是将文本框中的数字添加到保存数字的数组的方法

    class Ruta
    {
    Siffra number = new Siffra();

    public Siffra[,] SudokuArray = new Siffra[9, 9];



    public void Array_AddNumber(int x, int y, int value)
    {
    SudokuArray[x, y].nummer = value;
    }
    }
  3. 这里是“Siffra”,在瑞典语中是数字的意思,这是数组的类型

    class Siffra
    {
    private int _nummer;

    public int nummer
    {
    get { return _nummer; }
    set { _nummer = value; }
    }
    }

我做错了什么,我真的不明白,我的老师也帮不了我:/

这是完整的解决方案: https://dl.dropboxusercontent.com/u/13409794/WindowsFormsApplication5.zip

最佳答案

问题是对这一行的误解:

public Siffra[,] SudokuArray = new Siffra[9,9];

该行在内存中创建了一个新的二维数组对象,空间为 9 项 x 9 项(总共 81 项)。误解是数组中每个点的内容仍然是null。因此,稍后在您的代码中,当您执行此操作时:

SudokuArray[x,y].nummer = value;

代码首先查找数组引用并使用它来查找位置 (x,y) 处的元素。该值仍然是 null。然后,代码会使用 null 引用的 nummer 属性。哎呀。你不能那样做。

要修复它,您需要将此代码添加到您的 Ruta 类的构造函数中:

for (int x = 0; x < 9; x++)
for (int y = 0; y < 9; y++)
SudokuArray[x,y] = new Siffra();

关于c# - 将int放入各种对象数组时得到 'NullReferenceException',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21054432/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com