• 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.”

VPS Starter Arubacloud
0 głosów
2,669 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 243 wizyt
pytanie zadane 20 lutego 2023 w C# przez marek.nowak404 Nowicjusz (220 p.)
0 głosów
1 odpowiedź 124 wizyt

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...