Klasa jako tablica

0

Witam, mam tutaj prosty kod ktory niestety nie dziala.

Chciclabym stworzyc prosta tablice obiektow skladajacych sie z klasy Diary gdzie bym dodawal nazwe dzienniczka dla konkretnego ucznia [konkretnej instancji]. Do tego uzylem petli for.

Ktora nie dziala, oto ona:

            Console.Write("Wprowadz liczbe uczniow"); int liczbaUczniow = int.Parse(Console.ReadLine());
            for (int i = 0; i <= liczbaUczniow; i++)
            {
                Diary diary[i] = new Diary();
            }
           

Jak z obiektu zrobic tablice oraz czy sie da, chcialbym wsadzic obiekt w petle for i zrobic z niego pare obiektow jak to zrobic.

0

nie uzywaj tablic (watpie zebys mial jakikolwiek argument za, by je uzywac). Uzyj mylist = new List<Diary>()

wtedy robisz mylist.Add( new Diary)

a co Ty chcesz osiagnac to bedzie tak (uwierz mi, zamien to na liste tak jak Ci napisalem wyzej

Console.Write("Wprowadz liczbe uczniow"); int liczbaUczniow = int.Parse(Console.ReadLine());
var diaryArray = new Diary[liczbaUczniow];
for (int i = 0; i < liczbaUczniow; i++)
{
  diaryArray[i] = new Diary();
}
0

Warto znac obie metody, dzieki skorzystalem z tej pierwszej, znaczy sie z tablic, jak juz ogarne kolekcje bede probowal w ten sposob

0

zrobilem jak napisales, zwrocilo mi System.IndexOutOfRangeException: „Indeks wykraczał poza granice tablicy.”

1

Powinno być i < liczbaUczniow.

1

Powinno być i < diaryArray.Length, bo wtedy nie da się zrobić głupiego błędu.

0

Zrobilem xD nie wiem jak ale dziala caly program buhahahaha :D

1

Najpierw trzeba utworzyć tablicę a potem załadować do niej elementy .
Nie jestem zwolenikiem używania słówka kluczowego var jesli nie jest to konieczne

0

Indeks tablicy zaczyna się od zera czyli powinno być < a nie <= :)

0

@fasadin: A podal bys tez przyklad jak taki kod napisac w Listach? Dzieki

0

kontynuujac mam kolejne pytanie, juz wiem jak deklarowac klase w tablicy ale wyskakuje mi kolejny blad przy innym projekcie.

            TestowaKlasa[] d1 = new TestowaKlasa[5];
            for (int i = 0; i < d1.Length; i++)
            {
                d1[i].wyswietlam();
            }

           internal class TestowaKlasa
    {
        public void wyswietlam()
        {
            Console.WriteLine("wyswietlam klase");
        }
    }
1

Nigdzie nie tworzysz elementów tablicy, więc są null i nie możesz na nich wywoływać metody wyswietlam.

0

Nic tu nie zwraca null - po prostu nigdy nie inicjujesz zawartości tej tablicy.

d1[i] = new TestowaKlasa();
d1[i].wyswietlam();
0

EDIT
Patryk27

dzieki dziala

1

Polecam jakakolwiek książkę do c#. Wszystko jest na pierwszych 50 stronach. Będzie szybciej niż pisanie na forum.

0

kupilem, czekam na dostawe, wiec pÓÓÓÓki co musze zadowolic sie filmikami z youtuba : )

0

Ok. To oprócz zadowalania się coś spróbuj zrozumieć. Albo oglądaj takie gdzie ktoś dokładnie tłumaczy co i dlaczego robi.
Pytasz się o rzeczy elementarne. Każdy kiedyś zaczynał ale podstawy to trzeba zrozumieć. Na forum chyba nie ma sensu tłumaczyć co to jest klasa i obiekt. Chosiaz w sumie to sam nie wiem.

0

spoko luz, chill man
moze to i podstawowe, ale ja jeszcze do array nie doszedlem, a przynajmniej nie ma nic o polaczeniu array z obiektem. Dlatego sie pytam, bo nie wiedzialem jak zrobic cos co wydalo mi sie wazne a nie bylo zawarte w kursie.

0

Najciekawsze jest ze tak narzekacie na tablice a Dane w liście są przechowywane w tablicy .
Jak rozmiar listy jest za mały to tworzona jest nowa większa tablica , do której kopiowana jest stara tablica za pomocą metody Copy(Array, Int32, Array, Int32, Int32)

tyle przynajmniej wyczytalem

0

@Szymon Zachariasz: Owszem, możesz też nie używać listy i sam sobie kopiować dane między tablicami, gdy zabraknie miejsca. Tylko co w ten sposób zyskasz?

1 użytkowników online, w tym zalogowanych: 0, gości: 1