Une autre question de groupe dentelée:Jagged arrays et exceptions
Actuellement avec des tableaux dentelés de travail dans une classe plutôt que dans Main(). Avec ce tableau en dents de scie, je veux tester mes entrées utilisateur contre une exception personnalisée. Actuellement, lorsque je lance le programme, il crée le tableau jusqu'au dernier point où je veux remplir le tableau et tester ces données par rapport à mon exception. L'exception est en cours d'exécution malgré la bonne entrée de l'utilisateur. Je ne suis pas sûr si l'erreur est dans mon exception ou si l'erreur est mon tableau. NOTE: Je sais que cela peut sembler compliqué, mais pour ce que je fais, il faut que ça reste comme ça. Désolé :(
Classe
class StudentGrades
{
private char[][] grades;
private double totalGpa;
private int totalClasses;
private int semesters;
public StudentGrades()
{
totalClasses = 0;
SetSemesters(4);
grades = new char [semesters][];
}
public void InputSemesters()
{
int x;
int semestNum;
bool check;
do
{
check = false;
try
{
for (int r = 0; r < grades.Length; r++)
{
if (r == 0)
{
semestNum = 1;
}
else if (r == 1)
{
semestNum = 2;
}
else if (r == 2)
{
semestNum = 3;
}
else
{
semestNum = 4;
}
Console.Write("How many courses were taken semster {0}? ", semestNum);
x = int.Parse(Console.ReadLine());
CreateSemesters(r, x);
}
}
catch (System.FormatException e)
{
Console.WriteLine("Problem with input.\n{0}\nTry again.", e.Message);
check = true;
}
} while (check);
}
public void CreateSemesters(int sem, int numClasses)
{
grades[sem] = new char[numClasses];
totalClasses += numClasses;
}
public void EnterGrades()
{
int semestNum;
char letter;
bool check;
do
{
check = false;
try
{
for (int r = 0; r < grades.Length; r++)
{
if (r == 0)
{
semestNum = 1;
}
else if (r == 1)
{
semestNum = 2;
}
else if (r == 2)
{
semestNum = 3;
}
else
{
semestNum = 4;
}
for (int c = 0; c < grades[r].Length; c++)
{
Console.Write("Enter the letter grade for class {0} of semester {1}: ", c + 1, semestNum); //the array creation works up to this part. So I know the array is creating but not storing data.
letter = char.Parse(Console.ReadLine());
letter = grades[r][c];
CheckLetterGrade(letter);
}
}
}
catch (IncorrectLetterGradeException excepObj)
{
Console.Write("That is not an acceptable letter grade. Try Again. \n{0}", excepObj.Message);
Console.WriteLine();
check = true;
}
} while (check);
}
public void CheckLetterGrade(char G)
{
if (G != 'A' || G != 'B' || G != 'C' || G != 'D' || G != 'F')
{
IncorrectLetterGradeException excepObj = new IncorrectLetterGradeException("Not an acceptalbe letter grade of A-D or F");
throw excepObj;
}
}
Main()
class UseStudentGrades
{
static void Main(string[] args)
{
StudentGrades student = new StudentGrades();
// testing array functionality below
student.InputSemesters();
student.EnterGrades();
}
}
Exception
class IncorrectLetterGradeException :
System.ApplicationException
{
public IncorrectLetterGradeException(string exceptionType)
: base (exceptionType)
{
//empty body
}
}
MISE À JOUR 1: en train d'essayer ce changement pour voir si l'exception invite disparaît:
public void CheckLetterGrade(char G)
{
bool gradeMatch = (G == 'A' || G == 'B' || G == 'C' || G == 'D' || G == 'F');
if (!gradeMatch)
{
IncorrectLetterGradeException excepObj = new IncorrectLetterGradeException("Not an acceptalbe letter grade of A-D or F");
throw excepObj;
}
}
Et que je reçois cette question:
Exception being thrown with correct user input
Je suis assez sûr qu'il est possible de réduire votre code au strict minimum pour votre question. Qui devrait lire tout cela? –
@ maf-soft Ceci a été modifié pour supprimer les éléments qui ne correspondent pas à ma question. – ZLackLuster