Fel vid anrop av metoder som är i en switch-case C#
Hej!
Har fått i uppgift att skpa ett program som ber användaren att mata in poäng för olika ämnen.
Detta ska sedan omvandlas till betyg och presenteras för användaren. Användaren kan välja alternativ via en meny.
Allt är i sin tid färdigt men det har blivit ett problem när jag anropar metoderna 'skrivUtBetyg' och 'Statistik'.
Jag får följande felmeddelande för metoden 'skrivUtBetyg': CS0165: Use of unassigned local variable 'betyg'.
Och följande felmeddelande för metoden 'Statistik': CS0165: Use of unassigned local variable 'poäng'
Allt fungerade som det skulle framtill att jag lade till switch-statement som strulade till metoderna när dem placerades i varsin case.
Uppskattar all hjälp och feedback.
static void Main(string[] args)
{
List<string> ämnen = new List<string> { "Matematik", "Svenska", "Engelska", "Historia", "Fysik" };
bool repetera = true;
do
{
Console.WriteLine(" \n========Räkna betyg========");
Console.WriteLine("1. Skriv in dina poäng");
Console.WriteLine("2. Skriv ut dina betyg");
Console.WriteLine("3. Poäng & betyg statistik");
Console.WriteLine("4. Avsluta");
Console.WriteLine("==========================");
Console.Write("Ange ditt alternativ: ");
int alternativ = Convert.ToInt32(Console.ReadLine());
switch (alternativ)
{
case 1:
var poäng = läsPoäng(ämnen);
var betyg = omvandlaBetyg(poäng);
break;
case 2:
skrivUtBetyg(betyg, ämnen); // CS0165: Use of unassigned local variable 'betyg'
break;
case 3:
Statistik(betyg, poäng); // CS0165: Use of unassigned local variable 'poäng'
break;
case 4:
Console.WriteLine("Tack för att du använt programmet 'Räkna betyg'");
repetera = false;
break;
default:
Console.WriteLine("\nVänligen ange ett alternativ mellan 1-4.\n");
break;
}
}
while (true);
Console.Clear();
}
static List<int> läsPoäng(List<string> ämnen)
{
var poäng = new List<int>();
Console.Write("Ange totalpoäng för matematik:");
poäng.Add(Convert.ToInt32(Console.ReadLine()));
Console.Write("Ange totalpoäng för svenska:");
poäng.Add(Convert.ToInt32(Console.ReadLine()));
Console.Write("Ange totalpoäng för engelska:");
poäng.Add(Convert.ToInt32(Console.ReadLine()));
Console.Write("Ange totalpoäng för historia:");
poäng.Add(Convert.ToInt32(Console.ReadLine()));
Console.Write("Ange totalpoäng för fysik:");
poäng.Add(Convert.ToInt32(Console.ReadLine()));
return poäng;
}
static List<char> omvandlaBetyg(List<int> poäng)
{
List<char> betyg = new List<char>();
foreach (int i in poäng)
{
if (i < 50)
{
betyg.Add('F');
}
else if (i <= 60)
{
betyg.Add('E');
}
else if (i < 75)
{
betyg.Add('D');
}
else if (i < 90)
{
betyg.Add('C');
}
else if (i < 100)
{
betyg.Add('B');
}
else
{
betyg.Add('A');
}
}
return betyg;
}
static void skrivUtBetyg(List<char> betyg, List<string> ämnen)
{
// Använder mig utav metoden .Zip för att slå ihop betyget med
// sitt motsvarande ämne. För att sedan kunna presentera allt
// i samma linje som visar betyget och ämnet "zippat" till en linje.
// (Utan denna .Zip lösning så hade man fått göra två separate foreach-loopar
// som då visar ämnena och betygen separat.
// Denna lösning fungerar utmärkt för att iterera igenom två listor samtidigt.
var betygOchÄmnen = betyg.Zip(ämnen, (first, second) => first + " |" + second);
Console.WriteLine(" \n_________________________");
Console.WriteLine("| Betyg | Ämne ");
foreach (var item in betygOchÄmnen)
{
Console.WriteLine("| " + item);
}
Console.WriteLine("_________________________");
}
static void Statistik(List<char> betyg, List<int> poäng)
{
int betygA = 0;
int betygC = 0;
int betygF = 0;
int totalPoäng = poäng.Sum();
foreach (var c in betyg)
{
if (c == 'A')
{
betygA++;
}
else if (c == 'C')
{
betygC++;
}
else if (c == 'F')
{
betygF++;
}
}
Console.WriteLine(" \n========================");
Console.WriteLine("|Antal A betyg: " + betygA + " |");
Console.WriteLine("|Antal C betyg: " + betygC + " |");
Console.WriteLine("|Antal F betyg: " + betygF + " |");
Console.WriteLine("|Antal betygspoäng: " + totalPoäng + "|");
Console.WriteLine("========================");
}
}
}