Ad. 1. Pisałem o main
ie w jednym z poprzednich postów w punkcie 4.b., a sam punkt 4. dotyczył klasy Menu
i właśnie tam miał być main
. To wynikało z tego, że wydzieliliśmy klasę Menu
do obsługi interfejsu i założyłem, że to właśnie Menu
będzie klasą startową. U Ciebie klasą startową jest Dziennik
, myślę, że to mniej logiczne (bo Dziennik
miał być klasą reprezentującą dane), ale jeżeli Ci na tym zależy, to może tak zostać jako Twój wkład do pracy :)
Ad. 1.c.d. Może warto jeszcze dodać, że wydzielenie klasy Menu
było zastosowaniem (częściowym) wzorca MVC - Model View Controller możesz sobie poczytać co to takiego w wolnej chwili...
Ad. 3. Twoja analiza przyczyny błędu wydaje się być błędna... No chyba, że źle Cię zrozumiałem:-) Dziwność ocen wynika z błędu w metodzie
private void listaOcenPrzedmiot()
Przeanalizuj dokładnie jej treść. W analizie może pomóc poprawne sformatowanie kodu tabulatorami...
Co do skali ocen, to losowana jest jedna liczba ze zbioru {0, 1, ..., n-1}
.
U nas n=4
czyli za pomocą wzoru o=r+2
ciąg {0,1,2,3}
przekształcany jest na ciąg {2,3,4,5}
.
Jeżeli chcesz mieć inny zbiór ocen, to musisz wymyślić sobie inne przekształcenie ciągu {0, 1, ..., n-1}
.
Przekształcenie takie może być przekształceniem arytmetycznym (jak jest teraz), ale może też być bardziej rozbudowane (zawierać if
y i switch
e, tylko po co, skoro w przypadku skali ocen można wszystko załatwić w jednej linii (stosując przekształcenie arytmetyczne)...
try-catch
niepotrzebnie. Wyrzuć. Wiesz co to są wyjątki ?
Czy potrzebna jest metoda listaUczniow()
jeżeli masz już metodę wypiszUczniow()
? Przed odpowiedzią przeanalizuj treść tych metod i znajdź jakieś znaczące różnice :-)
Masz dwa skanery, wyrzuć ten z dziennika. A rand
przenieś do Menu
.
Co do tego jak bym to zrobił to:
dodajLosoweOceny
zrobiłbym tak samo albo (gdyby mi się chciało) w bardziej wymyślny i różnorodny sposób dodawał oceny...
dodajUcznia
tak samo, ale bez deklarowania zmiennej x
(zawsze jedna linia mniej),
listaUczniow
bym nie robił,
listaOcenPrzedmiot
zrobiłbym poprawnie ;-)
metody, o które pytałeś zrobiłbym tak samo jak dla ucznia, czyli podobnie do Ciebie...
Co do null
to oznacza ona brak obiektu. Np. gdy tworzysz nową zmienną/nowy atrybut, która/y ma przechowywać jakiś obiekt, ale żadnego obiektu do niej nie przypisujesz, to ma ona wartość null
. Jeżeli coś już było zapisane, a nie chcemy, żeby nadal było, to można tam wstawić null
.
W przypadku metod jest podobnie. Jeżeli z nagłówka metody wynika, że ma ona zwrócić obiekt klasy Uczen
, to każdy wariant wykonania się tej metody musi się skończyć zwróceniem obiektu tej klasy, czyli jest niedopuszczalne żeby przejść przez tę metodę wymijając wszystkie return
i po prostu dojść do końca. Dlatego, jeżeli nie chcemy nic zwracać (a nagłówek mówi, że coś zwracamy) to zwracamy null
, czyli brak obiektu.
Być może znasz jakiś język, w którym można nic nie zwrócić i nie stoi to na przeszkodzie, żeby wynik takiej funkcji móc przypisać do zmiennej jako undefined
albo coś innego, ale w javie jest inaczej. Albo metoda zwraca coś zawsze albo nigdy (gdy jest typu void
).
Dziwnie to wygląda, że nie znasz programowania obiektowego i robisz projekt w bardzo obiektowym języku... Przerób sobie jakiś porządny kurs javowy w internecie... Potrzebujesz też większego zaangażowania w tworzenie algorytmów i przykładania do tego większej uwagi, żebyś rozumiał co i po co robisz ;) Tego można się nauczyć, im więcej projektów tym będzie lepiej... Potraktuj skalę ocen jako możliwość takiego doskonalenia się...
Jeżeli obawiasz się, że Twój projekt jest zbyt mało Twój, to zawsze możesz dodać więcej funkcjonalności nawet jeżeli nie są wymagane w zadaniu. Możesz też potraktować to wszystko jako ćwiczenie (mam nadzieję, że bardzo pouczające) i zacząć od zera, tym razem samodzielnie, bez patrzenia na moje wskazówki (i rozkazy), bo teraz powinieneś już umieć (w jakimś stopniu) rozwiązywać takie programistyczne problemy (chyba, że tylko przeklejałeś, wtedy cała moja pisanina na nic;-p).