[英]Need help for a noob on using classes in C#
我正在开发一个将数字(int)馈入2D数组的程序。
这部分很简单,但是我的教授补充说,该程序应该能够确定通过字符串(通常是字母)从何处添加数字。
通常,我只是将int 2D数组转换为字符串一,将字符串连接到数字,然后说工作已经完成。
但是当教授提到必须使用一堂课来完成时,教授给了我们一个“噢,废话”的时刻。
我对类不是很了解,我只使用过它们通过get / set方法将一种变量以一种形式传递给另一种形式。
基本上,教授想要的是Array在同一索引中包含int和字符串,如下所示:
班级:
class ClassName
{
public int num;
public string loc;
}
主程序:
public frmSGame()
{
InitializeComponent();
}
ClassName[,] myArray = new ClassName[9,8];
public frmMain_Load(object sender, EventArgs e)
{
clearArray();
}
public void clearArray()
{
for (int y = 0; y < 8; i++)
{
for (int x = 0; x < 9; j++)
{
myArray[x, y].num = -1;
myArray[x, y].loc = "A";
}
}
}
这就是我的问题。 运行该程序会在clearArray()函数中的for int循环中产生“未处理NullReferenceException-未将对象引用设置为对象实例”的情况。
我真的不确定自己做错了什么。 将“ ClassName [,] myArray = new ClassName [9,8]”放在clearArray()函数中没有任何作用,并且由于我需要在多个函数中修改数组,因此我很确定将其放入每个函数中会导致造成灾难性的结果。
可以给我一些帮助/建议吗?
声明ClassName[,] myArray = new ClassName[9,8];
创建一个带有72个对象的空格的数组,但不创建72个对象。 数组以空开头。
在尝试对数组中的对象执行任何操作(例如,访问num
或loc
)之前,您需要实际创建它们。 您可以在内部循环中执行以下操作:
for (int x = 0; x < 9; j++)
{
myArray[x, y] = new ClassName();
myArray[x, y].num = -1;
myArray[x, y].loc = "A";
}
由于数组的每个元素都是一个对象,因此您必须实例化每个元素:
for(int x = 0; x < 9; x++)
for(int y = 0; y < 8; y++)
myArray[x, y] = new ClassName();
另外,您可以在设置每个参数之前简单地将该语句放入现有循环中。
这个课程对您来说可能会容易一些:
class ClassName
{
public int num;
public string loc;
public ClassName(int n, string s){
num = n;
loc = s;
}
}
public void clearArray(){
for(int x = 0; x < 9; x++)
for(int y = 0; y < 8; y++)
myArray[x, y] = new ClassName(-1, "A");
}
然后,您可以通过说出这些属性:
myArray[0, 4].num = 19
myArray[0, 4].loc = "NewLocation";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.