1

ジャグ配列とファイルの操作方法がわからないようです。番号が入った3つのファイルがあり、各ファイルを独自の配列に読み込みたいと思っています。これは私がこれまでに持っているものです。[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

ジャグ配列は、次の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] = new int [5];

jaggedArray [1] = new int [4];

jaggedArray [2] = new int [2]; "

したがって、コードで行っているのは、すべてnullに設定されている3つのint[]のジャグ配列を初期化することです。割り当てを試みる前に各インデックスで配列を作成しない場合、何もありません。

ただし、必要なのは動的割り当てのようです。プログラムを作成したときに、格納する必要のある整数の数がわかりません。この場合、クラスについて学ぶ必要がありますList<>。は配列に似ていますが、とを使用しList<>て固定サイズであると宣言するのではなく、実行時に要素の数を追加および削除できる点が異なります。http://msdn.microsoft.com/en-us/library/6sh2ey19.aspxAddRemove

于 2013-03-23T05:00:27.423 に答える