В этом случае: Индекс находился за пределами массива. Назначение: Напишите программу, которая определяет количество студентов, которые все еще могут зарегистрироваться в данном классе. Разработайте решение с помощью параллельных массивов. Проверьте свое решение, извлекая следующие данные из текстового файла. Определите класс исключения для этой проблемы, если текущая регистрация превышает максимальную регистрацию более чем на три. Остановите программу и покажите сообщение о том, какой курс переубежден.C# Параллельные массивы данных из текстового файла
Вот исходный код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
private static string[] classes = { "CS150", "CS250", "CS270", "CS300", "CS350" };
private static int[] currentEnrolled = { 18, 11, 9, 4, 20 };
private static int[] maxEnrollment = { 20, 20, 20, 20, 20 };
private static int currentEnrollment()
{
int enrolled = 0;
foreach (int i in currentEnrolled)
{
enrolled += i;
}
return enrolled;
}
private static void listClasses()
{
foreach (string i in classes)
{
Console.WriteLine("Class: {0}", i);
}
}
private static void ClassStatus()
{
for (int i = 0; i < currentEnrolled.Length; i++)
{
Console.WriteLine("Class: {0}, Max: {1}, Current: {2}, remaining: {3}", classes[i], maxEnrollment[i], currentEnrolled[i], maxEnrollment[i] - currentEnrolled[i]);
}
}
static void Main(string[] args)
{
Console.WriteLine("Currently Enrolled: {0}", currentEnrollment());
ClassStatus();
Console.ReadKey(false);
}
}
}
Теперь я редактировал код выше, чтобы взять текстовый файл, а, тем не менее я получаю сообщение об ошибке. Вот что я работаю с:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
private static string[] classes = new string[900];
private static int[] currentEnrolled = new int[900];
private static int[] maxEnrollment = new int[900];
private static int currentEnrollment()
{
int enrolled = 0;
foreach (int i in currentEnrolled)
{
enrolled += i;
}
return enrolled;
}
private static void listClasses()
{
foreach (string i in classes)
{
Console.WriteLine("Class: {0}", i);
}
}
private static void ClassStatus()
{
for (int i = 0; i < currentEnrolled.Length; i++)
{
Console.WriteLine("Class: {0}, Max: {1}, Current: {2}, remaining: {3}", classes[i], maxEnrollment[i], currentEnrolled[i], maxEnrollment[i] - currentEnrolled[i]);
}
}
static void Main(string[] args)
{
string[] lines = File.ReadAllLines("classes.txt");
int i = 0;
foreach (string line in File.ReadAllLines("classes.txt"))
{
string[] parts = line.Split(',');
while (i < 900 && i < parts.Length)
{
classes[i] = parts[1];
currentEnrolled[i] = int.Parse(parts[2]);
maxEnrollment[i] = int.Parse(parts[3]);
}
i++;
}
Console.WriteLine("Currently Enrolled: {0}", currentEnrollment());
ClassStatus();
Console.ReadKey(false);
}
}
}
Некоторые из компонентов, используемых в приведенном выше коде были взяты из этой статьи: Splitting data from a text file into parallel arrays
Текстовый файл выглядит следующим образом:
CS150,18,20
CS250,11,20
CS270,32,25
CS300,4,20
CS350,20,20
Любая помощь будут оценены. И да, это задание. Программирование - это, безусловно, не мой сильный костюм.
ли вы попробуйте использовать отладчик для пошагового выполнения кода ? –
Да. Отладчик остановит и выведет вышеуказанную ошибку в следующей строке: 'maxEnrollment [i] = int.Parse (части [3]);' @DanielMann – zordon
Массивы в .NET основаны на нулевом значении: 'parts [0] parts [1 ] parts [2] ', также неверно ваш цикл while. Проверьте индекс 'i'! –