Felhantering
Hej,
behöver hjälp att förstå hur jag kan åtgärda problemet med inkorrekt felhantering.
Arbetar i consoll application i visual studio.
Jag är absolut nybörjare (vilket ju min kod bevisar) och önskar en så enkel lösning som möjligt.
Nu förstår jag att jag försökt göra en while-loop som ska åtgärda problemet med fel inmatning, men nu går ju loopen helatiden och jag går aldrig vidare i programmet. Hur kan jag "stoppa", så att säga?
Eller måste jag göra felhanteringen på något annat sätt?
Jag önskar inte behöva skriva om hela koden då min tid att lösa uppgiften håller på rinna ut..
Tacksam för hjälp.
using System;
namespace GradeProgram
{
internal class Program
{
static void Main(string[] args)
{
string[] subject = { "mattematik", "svenska", "engelska", "histroia", "fysik" };
int[] points = new int[5];
char[] grade = new char[6];
Console.WriteLine("Hej och välkommen till betygsprogrammet!");
Console.ReadLine();
ReadGrade(subject, points);
GetGrade(subject, points, grade);
PrintOutGrade(subject, points, grade);
StatestikOut(subject, grade, points);
}
static void ReadGrade(string[] subject, int[] point)
{
int getPoints;
bool correctValue = false;
while (!correctValue)
{
try
{
for (int i = 0; i < subject.Length; i++)
{
Console.WriteLine("Mata in ditt betyg i siffror i följande ämnen: " + subject[i]);
getPoints = Convert.ToInt32(Console.ReadLine());
point[i] = getPoints;
}
}
catch (Exception e)
{
Console.WriteLine("Nu gjorde du en felaktig inmatning, " + e.Message);
Console.ReadLine();
}
}
}
static void GetGrade(string[] subject, int[] points, char[] grade)
{
for (int i = 0; i < subject.Length; i++)
{
if (points[i] > 90 && points[i] <= 100)
grade[i] = 'A';
else if (points[i] >= 90)
grade[i] = 'B';
else if (points[i] >= 80)
grade[i] = 'C';
else if (points[i] >= 70)
grade[i] = 'D';
else if (points[i] >= 60)
grade[i] = 'E';
else if (points[i] <= 50)
grade[i] = 'F';
}
}
static void PrintOutGrade(string[] subject, int[] points, char[] grade)
{
Console.WriteLine("Dina betyg: ");
for (int i = 0; i < subject.Length; i++)
Console.WriteLine(subject[i] + " betyget: " + grade[i]);
Console.ReadLine();
{
Console.WriteLine("Tryck på valfri tangent för att se betygsstatestik");
Console.ReadLine();
}
}
static void
StatestikOut(string[] subject, char[] grade, int[] points)
{
int antalA = 0;
int antalC = 0;
int antalF = 0;
int antalBDE = 0;
int sum = 0;
for (int i = 0; i < subject.Length; i++)
sum = sum + points[i];
for (int i = 0; i < grade.Length; i++)
if (grade[i] == 'A')
antalA++;
else if (grade[i] == 'C')
antalC++;
else if (grade[i] == 'F')
antalF++;
else if (grade[i] == 'B')
antalBDE++;
else if (grade[i] == 'D')
antalBDE++;
else if (grade[i] == 'E')
antalBDE++;
Console.WriteLine("Dina totala antal poäng är:" + sum);
Console.Write("Du har: " + antalA + " antal A." +
" Du har: " + antalC + "antal C." +
" Du har: " + antalF + " antal F." +
" Dina övriga betyg (B & D) är: " + antalBDE + "st.");
Console.ReadLine();
}
}
}
Vad vill du ska hända om man gör en felaktig inmatning? Ska man mata in allt igen, eller bara det värdet?
Jag vill att den ska ge felmeddelandet och ge användaren en ny chans. Som den gör nu, problemet är att det inte fungerar då den bara fortsätter loopa ämnena, alltså när användaren skrivit in alla betyg korrekt så börjar loopen om från första ämnet igen och går inte vidare till nästa metod.
Du får åtminstone sätta correctValue till true nån gång.
Ok. NU fick jag det att fungera!
Men...Får jag fråga om en annan sak.
Hur anropar jag den sista metoden "StatestikOut"? istället för att den bara skrivs ut när jag trycker på enter/valfri knapp.
Har testat tidigare att göra en meny med två val, en för statistik och ett för att avsluta. Sen en switchsats som skulle köra metoden "StatestikOut". Gick inte då metoden inte kunde anropas. .
Du anropar StatestikOut, men funktionen innan (PrintOutGrade) gör Console.ReadLine, flera gånger t o m.
Är det inte du som har skrivit programmet?
Det är jag men jag vet väl inte riktigt vad jag gör kanske..:(
Jag försöker..
Det jag menar är att jag inte lyckas anropa.
Vad menas med att den gör det flera gånger? Jag ser inte..
Högst upp, i Main, anropar du först PrintOutGrade och sedan StatestikOut. Så först görs allt som står i PrintOutGrade, och sedan allt som står i StatestikOut.
Sist i PrintOutGrade står Readline, sedan en utskrift och sedan en ReadLine till. Vid varje ReadLine väntar programmet på att du ska trycka på Enter.
Ta bort de ReadLine som du inte vill ha.
Ögonöppnare! Tack!