• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

System.InvalidOperationException: „Sekwencja nie zawiera elementów.”

Object Storage Arubacloud
0 głosów
2,743 wizyt
pytanie zadane 5 października 2018 w C# przez noname3 Obywatel (1,180 p.)

Napisałem program w dwóch klasach który pobiera od ucznia oceny i potem pokazuje ich średnią, najwyższą, najniższą, lecz ma problem z Visual Studio, ponieważ przy kompilacji nie wykrywa żadnych problemów, lecz gdy chcę uruchomić to pokazuje mi się "Nieobsługiwany wątek System.InvalidOperationException: „Sekwencja nie zawiera elementów.”"

(robię polskie nazwy zmiennych i metod, ponieważ wtedy łatwiej uczy mi się nowego języka)

Pierwsza klasa:

błąd występuje przy    return oceny.Max();    w metodzie NajwiekszaOcena

using System;
using System.Collections.Generic;
using System.Linq;


namespace StudentDiary
{
    class Diary
    {
        List<float> oceny = new List<float>();

        public void DodawanieOceny(float ocena)
        {
            oceny.Add(ocena);
        }
        float suma;
        float srednia;
        public float WyliczaneiSredniej()
        {
            foreach (var ocena in oceny)
            {
                suma = suma + ocena;
            }
            srednia = suma / oceny.Count();

            return srednia;
        }
        public float NajwiekszaOcena()
        {
            return oceny.Max();
        }
        public float NajnizszaOcena()
        {
            return oceny.Min();
        }

    }
}

Druga klasa:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace StudentDiary
{
    class Program
    {
        static void Main(string[] args)
        {
            Diary dziennik = new Diary();

            float srednia = dziennik.WyliczaneiSredniej();
            float najwyzsza = dziennik.NajwiekszaOcena();
            float najnizsza = dziennik.NajnizszaOcena();

            Console.WriteLine("Ile dostałeś dzisiaj ocen ?");
            int LiczbaOcen = int.Parse(Console.ReadLine());

            for (; ;)
            {
                Console.WriteLine("Podaj Ocenę:");
                float ocena = float.Parse(Console.ReadLine());
                //przekazujemy ocene do dziennika
                dziennik.DodawanieOceny(ocena);

                if(ocena == LiczbaOcen)
                {
                    break;
                }
            }

            Console.WriteLine("Średnia twoich ocen to:" + srednia);
            Console.WriteLine("Najwyższa ocena to:" + najwyzsza);
            Console.WriteLine("Najniższa ocena to:" + najnizsza);

            Console.ReadKey();
        }
    }
}

 

1 odpowiedź

+1 głos
odpowiedź 5 października 2018 przez RafalS VIP (122,820 p.)

Czytaj błąd :D. Wywołujesz max na pustej liście:

            Diary dziennik = new Diary();
 
            float srednia = dziennik.WyliczaneiSredniej();
            // lista jest pusta!!!
            float najwyzsza = dziennik.NajwiekszaOcena();
            float najnizsza = dziennik.NajnizszaOcena();

Coś takiego robisz:

List<float> oceny = new List<float>();
oceny.Max();

 

komentarz 5 października 2018 przez noname3 Obywatel (1,180 p.)
W sęsie mam dodać to:

List<float> oceny = new List<float>();

do metody NajwiekszaOcena ?
komentarz 5 października 2018 przez RafalS VIP (122,820 p.)
Nie. W sensie, że masz swoją liste ocen, która po utworzeniu jest pusta. Czego się spodziewasz po szukaniu maksymalnej wartości w pustej liście? Jak nie ma w czym szukać to leci wyjątek.
komentarz 5 października 2018 przez noname3 Obywatel (1,180 p.)
Dzięki, lecz pojawił się kolejny problem.

Włączyłem program podałem oceny i wyświetliło mi się: "Średnia twoich ocen to:NaN"
komentarz 5 października 2018 przez RafalS VIP (122,820 p.)

Brzmi jakbyś dzielił przez 0, czyli ponownie liczysz średnią z pustej tablicy. W tej linijce:

srednia = suma / oceny.Count();

oceny.Count() pewnie jest 0.

Podobne pytania

0 głosów
2 odpowiedzi 263 wizyt
pytanie zadane 20 lutego 2023 w C# przez marek.nowak404 Nowicjusz (220 p.)
0 głosów
1 odpowiedź 128 wizyt

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...