Найти ошибку в готовом коде (действия со ступенчатым массивом) - C#
Формулировка задачи:
В директории проекта лежит файл
test3.txt
:2 4 6 8
9 10
12
3 3 1 5 0
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace Array_Rang_2
{
class Program
{
/*static int[] intArray = null;
static int inputChoice = 0;
static int inputChoiceLength = 0;
static bool exit = true;*/
//int[] intArray = null;
//int[,] arrMtrx = null;
int[][] jaggedArr = null;
//int[,] Sum = null, Dif = null, r2 = null;
int m, n, inputChoiceLength;
int dN; // для запоминания кол-ва подмассивов в jaggedArr
int inputChoice = 0;
bool exit = true;
void inputJag() // Ввод ступенчатого
{
int i = 0, j=0; // индексы
int d = 0; // номер очередного массива (строки) в массиве jaggedArr
Console.WriteLine("Введите кол-во элементов ступенчатого массива: "); // кол-во массивов в массиве
int q = Convert.ToInt32(Console.ReadLine()); // q - кол-во массивов в jaggedArr
int[][] jaggedArr = new int[q][]; // объявление ступенчатого массива
while (d < q) // заполнение подмассивов
{
i = 0;
Console.WriteLine("Введите кол-во эл-тов в строке: "); //(в каждом новом массиве)
int n = Convert.ToInt32(Console.ReadLine()); // измерение (кол-во эл-тов) очередного подмассива
jaggedArr[d] = new int[n]; // объявление очередного подмассива
while (i < n) // заполнение подмассива
{
Console.WriteLine("Введите эл-т строки: "); // эл-т нового подмассива (массива в jaggedArr)
jaggedArr[d][i] = Convert.ToInt32(Console.ReadLine());
i++;
}
d++;
}
dN = d;
// Вывод
for (i = 0; i < d; i++)
{
Console.WriteLine();
for (j = 0; j < jaggedArr[i].Length; j++)
{
Console.Write(jaggedArr[i][j] + " ");
}
}
Console.WriteLine();
}
void readJag() // Заполнение из файла ступенчатого
{
Console.Write("Путь файла: "); string filePath = Console.ReadLine();
string[] rows = File.ReadAllLines(filePath);
int[][] jaggedArr = new int[rows.Length][];
Console.WriteLine("Ступенчатый массив из файла: ");
for (int i = 0; i < rows.Length; i++)
{
string[] numbers = rows[i].Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
jaggedArr[i] = new int[numbers.Length];
for (int j = 0; j < numbers.Length; j++)
{
jaggedArr[i][j] = int.Parse(numbers[j]);
Console.Write("{0} ", jaggedArr[i][j]);
}
Console.WriteLine();
}
Console.Read();
}
void outJag() // Вывод ступенчатого массива
{
for (int i = 0; i < jaggedArr.Length; i++)
{
for (int j = 0; j < jaggedArr[i].GetLength(0); j++)
{
Console.Write(jaggedArr[i][j] + " ");
}
Console.Write('\n');
}
Console.ReadKey();
}
void changeJag() // Изменение эл-тов массива
{
int i, index2, j;
Console.WriteLine("Параметры изменяемого элемента...\nНомер строки: ");
int index = Convert.ToInt32(Console.ReadLine()); // строка, содерж нужный эл-т
Console.WriteLine("\nНомер эл-та: "); index2 = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("\nВведите, на какой элемент вы хотите его изменить");
int next = Convert.ToInt32(Console.ReadLine());
jaggedArr[index - 1][index2 - 1] = next;
for (i = 0; i < jaggedArr[i].Length; i++)
{
Console.WriteLine();
for (j = 0; j < jaggedArr[i].Length; j++)
{
Console.Write(jaggedArr[i][j] + " ");
}
}
}
void jagMaxMin()
{
int i, j, k;
int jagMax = 0;
int jagMin = 0;
k = 0;
int k3 = 0;
for (i = 0; i < dN; i++)
{
for (j = 0; j < jaggedArr[i].Length; j++)
{
if (jaggedArr[i][j] > jagMax)
{
jagMax = jaggedArr[i][j];
k = i;
k3 = j;
}
}
}
Console.WriteLine("Max: jaggedArr[{0},{1}]={2}", k + 1, k3 + 1, jagMax);
for (i = 0; i < dN; i++)
{
for (j = 0; j < jaggedArr[i].Length; j++)
{
if (jaggedArr[i][j] < jagMin)
{
jagMin = jaggedArr[i][j];
k = i;
k3 = j;
}
}
}
Console.WriteLine("Min: jaggedArr[{0},{1}]={2}", k+1, k3+1,jagMin);
}
//static void menu() // Меню
void menu()
{
while (exit)
{
Console.SetCursorPosition(1, 1);
Console.BackgroundColor = ConsoleColor.DarkMagenta;
Console.ForegroundColor = ConsoleColor.Yellow;
Console.Write("Выберите опцию: \n 0 - выход \n\n --СТУПЕНЧАТЫЕ МАССИВЫ--- \n 18 - ввод с клав-ы \n 19 - заполнение из файла \n 20 - вывод \n 21 – изменение эл-тов массива \n 22 – max, min\n");
Console.ResetColor();
Console.Write("Опция>> ");
inputChoice = Convert.ToInt32(Console.ReadLine());
//Console.WriteLine("inputChoice = " + inputChoice);
switch (inputChoice)
{
case 18: inputJag();
break;
case 19: readJag();
break;
case 20: outJag();
break;
case 21: changeJag();
break;
case 22: jagMaxMin();
break;
case 0: exit = false;
break;
}
if (exit == true)
{
Console.WriteLine("Нажмите любую клавишу для продолжения...");
Console.ReadKey();
}
Console.Clear();
}
}
static void Main(string[] args)
{
int i = 1;
i++;
//menu();
Program p = new Program();
p.menu();
}
}
}ОШИБКУ дает в опции 19
(скрин ниже): Ошибка в записи данных из файла в массив..... только где. Как ее исправить, чтобы работало и позволяло производить действия со ступенчатым массивом дальше?Решение задачи: «Найти ошибку в готовом коде (действия со ступенчатым массивом)»
textual
Листинг программы
int[] intArray = null;
int[,] arrMtrx = null;
int[][] jaggedArr = null;
int[,] Sum = null, Dif = null, r2 = null;
int m, n, inputChoiceLength;
int dN, qN; // для запоминания кол-ва подмассивов в jaggedArr
//public int q;
//int inputChoice = 0;
bool exit = true;
void inputJag() // Ввод ступенчатого
{
Console.WriteLine("Введите кол-во элементов ступенчатого массива: "); // кол-во массивов в массиве
int q = Convert.ToInt32(Console.ReadLine()); // q - кол-во массивов в jaggedArr
jaggedArr = new int[q][]; // объявление ступенчатого массива
for (int i = 0; i<q; i++)
{
Console.WriteLine("Введите кол-во эл-тов в строке: "); //(в каждом новом массиве)
int n = Convert.ToInt32(Console.ReadLine()); // измерение (кол-во эл-тов) очередного подмассива
int k=1;
jaggedArr[i] = new int[n]; // объявление очередного подмассива
for (int j=0; j<n; j++)
{
Console.WriteLine("Vvedite"+k+" element stroki");
jaggedArr[i][j]=int.Parse(Console.ReadLine());
k++;
}
qN = q;
Console.WriteLine();
}
for (int i = 0; i < q; i++)
{
Console.WriteLine();
for (int j = 0; j < jaggedArr[i].Length; j++)
{
Console.Write(jaggedArr[i][j] + " ");
}
}
Console.WriteLine();
}
void readJag() // Заполнение из файла ступенчатого
{
Console.Write("Путь файла: "); string filePath = Console.ReadLine();
string[] rows = File.ReadAllLines(filePath);
int[][] jaggedArr = new int[rows.Length][];
Console.WriteLine("Ступенчатый массив из файла: ");
for (int i = 0; i < rows.Length; i++)
{
string[] numbers = rows[i].Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
jaggedArr[i] = new int[numbers.Length];
for (int j = 0; j < numbers.Length; j++)
{
jaggedArr[i][j] = int.Parse(numbers[j]);
Console.Write("{0} ", jaggedArr[i][j]);
}
Console.WriteLine();
}
Console.Read();
}
void outJag() // Вывод ступенчатого массива
{
for (int i = 0; i < jaggedArr.Length; i++)
{
for (int j = 0; j < jaggedArr[i].GetLength(0); j++)
{
Console.Write(jaggedArr[i][j] + " ");
}
Console.Write('\n');
}
Console.ReadKey();
}
void changeJag(int[][]jaggedArr) // Изменение эл-тов массива
{
int i, j;
Console.Write("Параметры изменяемого элемента...\nНомер строки: ");
int index = Convert.ToInt32(Console.ReadLine()); // строка, содерж нужный эл-т
Console.Write("Номер эл-та: "); int index2 = Convert.ToInt32(Console.ReadLine());
Console.Write("Введите замену: ");
int next = Convert.ToInt32(Console.ReadLine());
jaggedArr[index - 1][index2 - 1] = next; // index-1 - для юзера
Console.WriteLine("Измененный ступенчатый массив: ");
for (i = 0; i < qN; i++)
{
Console.WriteLine();
for (j = 0; j < jaggedArr[i].Length; j++)
{
Console.Write(jaggedArr[i][j] + " ");
}
}
Console.ReadLine();
}
void jagMaxMin() // Max, Min ступенчатого
{
int i, j, k;
int jagMax = 0;
int jagMin = 0;
k = 0;
int k3 = 0;
for (i = 0; i < dN; i++)
{
for (j = 0; j < jaggedArr[i].Length; j++)
{
if (jaggedArr[i][j] > jagMax)
{
jagMax = jaggedArr[i][j];
k = i;
k3 = j;
}
}
}
Console.WriteLine("Max: jaggedArr[{0},{1}]={2}", k + 1, k3 + 1, jagMax);
for (i = 0; i < dN; i++)
{
for (j = 0; j < jaggedArr[i].Length; j++)
{
if (jaggedArr[i][j] < jagMin)
{
jagMin = jaggedArr[i][j];
k = i;
k3 = j;
}
}
}
Console.WriteLine("Min: jaggedArr[{0},{1}]={2}", k+1, k3+1,jagMin);
}
//static void menu()
void menu()
{
while (exit)
{
Console.SetCursorPosition(1, 1);
Console.BackgroundColor = ConsoleColor.DarkMagenta;
Console.ForegroundColor = ConsoleColor.Yellow;
Console.Write("Выберите опцию: \nn--СТУПЕНЧАТЫЕ МАССИВЫ--- \n 18 - ввод с клав-ы \n 19 - заполнение из файла \n 20 - вывод \n 21 – изменение эл-тов массива \n 22 – max, min\n");
Console.ResetColor();
Console.Write("Опция>> ");
/*int inputChoice;
int.TryParse(Console.ReadLine(), out inputChoice);*/ // было
int inputChoice;
int.TryParse(Console.ReadLine(), out inputChoice);
//Console.WriteLine("inputChoice = " + inputChoice);
switch (inputChoice)
{
case 18: inputJag();
break;
case 19: readJag();
break;
case 20: outJag();
break;
case 21: changeJag(jaggedArr);
break;
case 22: jagMaxMin();
break;
case 0: exit = false;
break;
}
if (exit == true)
{
Console.WriteLine("Нажмите любую клавишу для продолжения...");
Console.ReadKey();
}
Console.Clear();
}
}
static void Main(string[] args)
{
//menu();
Program p = new Program();
p.menu();
}
}
}