1

我似乎无法弄清楚如何使用锯齿状数组和文件。我有三个带有数字的文件,并且想将每个文件读入它自己的数组中。这就是我到目前为止所拥有的。试图填充 [0] 数组但无济于事。任何帮助表示赞赏。也找不到任何关于这样做的教程。

private void button1_Click(object sender, EventArgs e)
{
    StreamWriter section1;
    StreamWriter section2;
    StreamWriter section3;
    StreamReader section1read;
    StreamReader section2read;
    StreamReader section3read;

    section1 = File.CreateText("Section1.txt");
    section2 = File.CreateText("Section2.txt");
    section3 = File.CreateText("Section3.txt");

    int[][] Scores = new int[3][];

    Random randnum = new Random();

    for (int i = 0; i < 12; ++i)
    {
        int num = randnum.Next(55, 99);
        section1.WriteLine(num);
    }

    for (int j = 0; j < 8; ++j)
    {
        int num1 = randnum.Next(55, 99);
        section2.WriteLine(num1);
    }

    for (int k = 0; k < 10; ++k)
    {
        int num3 = randnum.Next(55, 99);
        section3.WriteLine(num3);
    }

    section1.Close();
    section2.Close();
    section3.Close();

    section1read = File.OpenText("Section1.txt");

    int nums = 0;
    while (!section1read.EndOfStream)
    {
        Scores[0][nums] = int.Parse(section1read.ReadLine());
        ++nums;
    }
    for (int i = 0; i < Scores.Length; ++i)
    {
        listBox1.Items.Add(Scores[0][i]);
    }
    section1read.Close();
}
4

2 回答 2

2

锯齿状数组应该分两步初始化:

  1. 数组本身:

    int[][] Scores = new int[3][];
    
  2. 子数组:

    Scores[0] = new int[12];
    Scores[1] = new int[8];
    Scores[2] = new int[10];
    

数组是固定长度的数据结构。如果事先不知道大小,就得使用动态长度结构。最好的选择是List<>类:

List<List<int>> scores = new List<List<int>>();

scores.Add( new List<int>() );

using( StreamReader section1read = File.OpenText("Section1.txt"))
{
    string line;
    while ((line = section1read.ReadLine()) != null)
    {
        scores[0].Add(int.Parse(line));
    }
}

以下是需要考虑的其他事项:

  • 使用using块确保与文件关联的任何非托管资源都已释放。
  • 您可以检查返回值StreamReader.ReadLine()以确定文件的结尾
于 2013-03-23T05:00:07.783 回答
2

http://msdn.microsoft.com/en-us/library/2s05feca.aspx

引用:

“在你可以使用 jaggedArray 之前,它的元素必须被初始化。你可以像这样初始化元素:

jaggedArray[0] = 新的 int[5];

jaggedArray[1] = new int[4];

jaggedArray[2] = 新的 int[2];"

因此,您在代码中所做的是初始化一个由三个 int[] 组成的锯齿状数组,这些数组都设置为 null。如果在尝试分配给它之前没有在每个索引处创建数组,那么什么都没有。

不过,您似乎想要的是动态分配——您不知道在编写程序时需要存储多少整数。在这种情况下,您应该了解该类List<>。就像一个数组,除了你可以在运行时添加和删除它拥有的元素数量,而不是使用andList<>声明它具有固定大小。http://msdn.microsoft.com/en-us/library/6sh2ey19.aspxAddRemove

于 2013-03-23T05:00:27.423 回答