2013-03-23 1 views
1

Я не могу понять, как работать с Jagged Arrays и Files. У меня есть три файла с числами в них и wan, чтобы читать каждый файл в свой собственный массив. Это то, что у меня есть до сих пор. Пытался заполнить массив [0], но безрезультатно. Любая помощь оценивается. Невозможно найти учебники по этому поводу.заполнить Jagged Array файлами C#

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(); 
} 
+2

'Scores.Length' ->' Оценки [0] .Length'? Что происходит не так? Ошибка компиляции, исключение? – AaronLS

+0

Есть ли что-нибудь в списке? Похож на эту ошибку со счетом [0] .Length приведет к появлению только первого элемента. – AaronLS

+0

Я получаю исключение NullReferenceException Необработанная ошибка в секции1read.ReadLine() – rogerthat

ответ

2

Зубчатые массивы должны быть инициализированы в два этапа:

  1. Сам массив:

    int[][] Scores = new int[3][]; 
    
  2. Суб-массивы:

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

Array - структура данных фиксированной длины. Если вы не знаете размер заранее, вам нужно использовать динамическую структуру длины. Наилучшим вариантом является 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(), чтобы определить конец файла
+0

Вот еще одна из моих проблем. Должны ли инициализироваться зубчатые массивы? Что, если я не знаю размер? – rogerthat

+0

@healix См. Мой ответ :) – Patashu

+0

@ MD.Unicorn оценили. – rogerthat

2

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

Цитата:.

«Перед тем, как можно использовать jaggedArray, его элементы должны быть инициализированы Вы можете инициализировать элементы, как это:

jaggedArray [0] = новый Int [5];

jaggedArray [1] = new int [4];

jaggedArray [2] = новый INT [2];»

Итак, что вы делаете в коде инициализации зазубренный массив из трех ИНТ [] S, что все установленные на нуль Если вам. не создавайте массив в каждом индексе перед тем, как пытаться назначить ему, ничего не существует.

Кажется, что вы хотите, динамическое распределение - вы не знаете, сколько целых чисел вам нужно хранить, когда вы написала программу. В этом случае вы должны узнать о классе List<>. List<> похож на массив, за исключением того, что вы можете добавлять и удалять из числа элементов, которые он имеет во время выполнения, вместо объявления его фиксированного размера, используя Add и Remove. http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx

+0

Я знаю о List <>, но я пытался выяснить, возможно ли это с помощью массива с зазубриванием, потому что я никогда не использую их. – rogerthat

+0

@healix. Возможно, что с помощью jagged массива можно инициализировать его количество элементов до точного числа, которое вам нужно в авансовый. Если это не описывает ваш прецедент, используйте Список. – Patashu

+0

Итак, массив с зазубринами всегда должен знать размер? Он не может быть динамически распределен? – rogerthat

 Смежные вопросы

  • Нет связанных вопросов^_^