我正在尝试为一个非常简单的游戏制作存档游戏,这是我现在使用的代码,用于将钱写入.txt文件(NameBox是用于写入.txt文件名称的文本框) :
private void SaveBtn_Click(object sender, EventArgs e)
{
String filename = NameBox.Text;
if (filename == "")
{
filename = "New Save";
}
filename += ".txt";
String[] Money = new String[MainForm.Money];
Money[MainForm.Money] = MainForm.Money.ToString();
System.IO.File.WriteAllLines(filename, Money);
Application.Exit();
}
然而,我在
之后的任何一行上都得到一个索引越界错误Money[MainForm.Money] = MainForm.Money.ToString();
我也试过这样做:
for (int i = 0; i < MainForm.Money; i++){
Money[MainForm.Money] = MainForm.Money.ToString();
}
但它给我一个关闭身体的错误(我称之为波浪形支架) 我之前使用这个代码(wallList [i] .ToString()引用了一个返回所有值的wall类中的方法),使用一系列墙和士兵保存了它们的大小和位置,然后我做了一个savegame:
private void SaveBtn_Click(object sender, EventArgs e)
{
String filename = filenametxt.Text;
if (filename == "")
{
filename = "Level";
}
filename += ".txt";
String[] lines = new String[MainForm.wallList.Count +
MainForm.soldierList.Count+1];
for (int i = 0; i < MainForm.wallList.Count; i++)
{
lines[i] = MainForm.wallList[i].ToString();
}
lines[MainForm.wallList.Count] = "@";
for (int i = 0; i < MainForm.soldierList.Count; i++)
{
lines[i + MainForm.wallList.Count +1] =
MainForm.soldierList[i].ToString();
}
System.IO.File.WriteAllLines(filename, lines);
Application.Exit();
}
如果有人能帮助我,我将非常感激! (请向我解释代码的每个部分的含义,例如解释.ToString()将int转换为字符串)
答案 0 :(得分:6)
String[] Money = new String[MainForm.Money];
在这里创建MainForm.Money大小的数组。假设MainForm.Money的值为10。 该阵列的大小为10,这意味着有10个插槽。这些编号为0-9。
Money[MainForm.Money] = MainForm.Money.ToString();
在这里你做了相当于Money [10]的时候它只有9个插槽。因此你去了#34; Out of Bounds&#34;数组。
答案 1 :(得分:2)
数组是从0开始的,所以这个数组访问是个问题:
Money[MainForm.Money] = ... // MainForm.Money-1 would be okay
所以我们有这两行导致你的问题:
String[] Money = new String[MainForm.Money];
Money[MainForm.Money] = MainForm.Money.ToString();
假设MoneyForm.Money
是int
- 让我们假装它是5000:
在这种情况下,您将创建一个字符串数组Money
,其中包含5000个空插槽,用于存储字符串。
在第二行中,你基本上说你想把5000作为字符串(所以"5000"
)写在数组的第5000个元素中。
Money[5000] = "5000";
但是当你声明一个包含5000&#34; slot&#34;的数组时你有从0到4999,因为数组是从0开始的。这就是为什么5000超出界限&#34; 。
答案 2 :(得分:0)
看来你正在初始化一个Mainform.Money长度从0开始直到Mainform.Money - 1的数组,但是当你尝试设置Money [Mainform.Money]的值时,你设置的是定义数组之外的值。
答案 3 :(得分:0)
由于您填充的字符串数组Money
的长度等于MainForm.Money
的值,因此数组的最大可能索引等于MainForm.Money -1
而不是MainForm.Money
:< / p>
Money[MainForm.Money] = MainForm.Money.ToString();
// you should change the index here to be within the range (0 - MainForm.Money -1) based on your requirements
答案 4 :(得分:0)
在下面的行中,您将Money初始化为x数量
的数组 strings (x = MainForm.Money).
然后您尝试从下面的行访问项目x + 1,这导致了异常。如果要访问数组的最后一个元素,则应调用Money [MainForm.Money - 1]。
Money[MainForm.Money] = MainForm.Money.ToString();