Необработанное исключение. System.IndexOutOfRangeException: индекс выходит за пределы диапазонаC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Необработанное исключение. System.IndexOutOfRangeException: индекс выходит за пределы диапазона

Сообщение Anonymous »

Публикую здесь впервые. Я пытаюсь написать программу, позволяющую удалять ученика, добавлять нового и так далее. Но когда я удаляю и добавляю его снова, а затем снова удаляю, я получаю эту ошибку

Необработанное исключение. System.IndexOutOfRangeException: индекс выходит за пределы диапазона

Вот код — Student.cs:

Код: Выделить всё

namespace StudentsSelector
{
public static class StudentsList
{
public static string[] AllStudents { get; private set; }
private static int studentCount;

// New property for assigned roles
public static Dictionary AssignedRoles { get; set; }

// Static constructor to initialize arrays
static StudentsList()
{
AssignedRoles = new Dictionary();

AllStudents = new string[]
{
// List of initial students
"Alex Jose Rodriguez Taveras",
"Amaury Daniel Romero Gonzalez",
"Ashlee Ramirez Rosario",
"Cyd Marie Jorge Chapman",
"Edison Yadir Rossis",
"Edwin Oscar Perez Rodriguez",
"Eli Samuel Suero Rodriguez",
"Erickson David Encarnacion Encarnacion",
"Eudy Yunior Lorenzo Ramirez",
"Jamil Guzman Feliz",
"Joan Manuel Arroyo Valerio",
"Jose Miguel Canela Santos",
"Maria Del Carmen Diaz Campanas",
"Maria Marlene Abreu Saiz",
"Marlon Miguel Vargas Mendez",
"Michael Dmeshell Sanchez Heredia",
"Odana Margarita Calderon Pache",
"Oscar Daniel Tuletta Mercedes",
"Rafael Antonio Urbaez Hernandez",
"Smith Morillo Encarnacion",
"Teudy Joshua Encarnacion Fulgencio",
"Xander Ruddy Cruz De La Rosa",
"Yadianna Vargas Pimentel",
"Yafreisy Emelin Alvarez Capellan",
"Yoelmi Alexander Alcala Valdez"
};

studentCount = AllStudents.Length;
}

// Method to reset all students (for testing or initialization)
public static void ResetAllStudents()
{
AllStudents = new string[]
{
// Reset the list of students
"Alex Jose Rodriguez Taveras",
"Amaury Daniel Romero Gonzalez",
"Ashlee Ramirez Rosario",
"Cyd Marie Jorge Chapman",
"Edison Yadir Rossis",
"Edwin Oscar Perez Rodriguez",
"Eli Samuel Suero Rodriguez",
"Erickson David Encarnacion Encarnacion",
"Eudy Yunior Lorenzo Ramirez",
"Jamil Guzman Feliz",
"Joan Manuel Arroyo Valerio",
"Jose Miguel Canela Santos",
"Maria Del Carmen Diaz Campanas",
"Maria Marlene Abreu Saiz",
"Marlon Miguel Vargas Mendez",
"Michael Dmeshell Sanchez Heredia",
"Odana Margarita Calderon Pache",
"Oscar Daniel Tuletta Mercedes",
"Rafael Antonio Urbaez Hernandez",
"Smith Morillo Encarnacion",
"Teudy Joshua Encarnacion Fulgencio",
"Xander Ruddy Cruz De La Rosa",
"Yadianna Vargas Pimentel",
"Yafreisy Emelin Alvarez Capellan",
"Yoelmi Alexander Alcala Valdez"
};

studentCount = AllStudents.Length;
}

public static void ResizeArray()
{
// Create a new array with the increased size
string[] newArray = new string[AllStudents.Length + 1];
Array.Copy(AllStudents, newArray, AllStudents.Length);
AllStudents = newArray;
}

// Method to remove a student at a specific index
public static void RemoveStudentAt(int index)
{
if (index <  0 || index >= studentCount)
{
throw new IndexOutOfRangeException("Index is out of range.");
}

for (int i = index; i < studentCount - 1; i++)
{
AllStudents[i] = AllStudents[i + 1];
}

AllStudents[studentCount - 1] = string.Empty;
studentCount--;
}

// Method to get the current student count
public static int GetStudentCount()
{
return studentCount;
}
}
}

Код: Выделить всё

DeleteStudent.cs:
namespace StudentsSelector
{
class GetRidStudents
{
public static void DeleteStudents()
{
string[] Students = StudentsList.AllStudents;

Console.Write("Ingrese el nombre del estudiante a eliminar: ");
string? UserSelection = Console.ReadLine();

if (UserSelection != null)
{
bool studentDeleted = false;

for (int i = 0; i < Students.Length; i++)
{
if (!string.IsNullOrEmpty(Students[i]) && Students[i].IndexOf(UserSelection, StringComparison.OrdinalIgnoreCase) >= 0)
{
StudentsList.RemoveStudentAt(i);
studentDeleted = true;
i--;
}
}

if (studentDeleted)
{
Console.WriteLine("Lista de estudiantes actualizada:");
foreach (string student in StudentsList.AllStudents)
{
if (!string.IsNullOrEmpty(student)) // Mostrar solo los nombres válidos
{
Console.WriteLine(student);
}
}
}
else
{
Console.WriteLine("No se encontraron estudiantes que coincidan con la entrada.");
}
}
else
{
Console.WriteLine("La entrada fue nula. Por favor, ingrese una parte válida del nombre del estudiante.");
}
}
}
}
Если кто-то может мне помочь, пожалуйста, сделайте это! Я уделил этому большое внимание, спасибо и удачного дня.
Я пробовал переписать код, добавляя больше методов для проверки индекса и т. д., но это не сработало. Я тоже пробовал GPT, ничего не помогло

Подробнее здесь: https://stackoverflow.com/questions/786 ... t-of-range
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»