Индекс вышел за пределы массива? C# формы
Я пытаюсь прочитать следующий текстовый файл:(пропуская первые 8 строк) И читая из стрелки каждый столбец
И я делаю это, помещая каждое значение столбца в массив, который продиктован положением и длиной
Чтобы проверить, действительно ли значение массива захватило значение столбца, я хочу увидеть значение [0], когда я нажимаю другую кнопку. Но когда я запускаю свое приложение, я получаю сообщение об ошибке, что мой индекс выходит за пределы массива? Как, когда мой размер массива равен 3, и я не иду дальше этого.
string[] val = new string[3 ]; // One of the 3 arrays - this stores column values
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
string[] lines = File.ReadAllLines(ofd.FileName).Skip(8).ToArray();
textBox1.Lines = lines;
int[] pos = new int[3] { 3, 6,18}; //setlen&pos to read specific clmn vals
int[] len = new int[3] {2, 10,28}; // only doing 3 columns right now
foreach (string line in textBox1.Lines)
{
for (int j = 0; j <= 3; j++)
{
val[j] = line.Substring(pos[j], len[j]); // THIS IS WHERE PROBLEM OCCURS
}
}
}
}
private void button2_Click(object sender, EventArgs e)
{ // Now this is where I am testing to see what actual value is stored in my //value array by simply making it show up when I click the button.
MessageBox.Show(val[0]);
}
}
}
3 ответа
Массивы 0
индексируется, это означает, что массив с 3 элементами будет иметь элементы по индексам 0
, 1
, а также 2
,
3
вне границ, поэтому, когда вы пытаетесь получить доступ pos[3]
или же len[3]
Ваша программа сгенерирует исключение.
использование j < 3
вместо j<=3
for (int j = 0; j < 3; j++)
{
val[j] = line.Substring(pos[j], len[j]); // THIS IS WHERE PROBLEM OCCURS
}
Массив pos
имеет три значения в нем.
Рассмотрим ваш цикл.
- Сначала я ноль. Это меньше или равно трем.
- Тогда я один. Это меньше или равно трем.
- Тогда мне два года. Это меньше или равно трем.
- Тогда мне три года. Это меньше или равно трем.
- Тогда мне четыре года. Это не меньше или равно трем.
Он выполняет тело цикла 4 раза. Есть 3 предмета.
Для исправления, чтобы следовать стандартным соглашениям, просто используйте меньше чем, а не меньше или равно, в проверке состояния вашего for
петля.
Проблема в том, что вы идете до j == 3
в for
заявление. Это будет четвертый элемент, так как массивы начинаются с нуля, поэтому измените for
заявление для:
for (int j = 0; j < 3; j++)
и тебе будет хорошо идти.