Prosty program w Javie - podstawy klas - moje rozwiązanie

Prosty program w Javie - podstawy klas - moje rozwiązanie
BB
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 8 lat
  • Postów:80
0

Cześć!
Potrzebuję Waszej pomocy przy rozwiązaniu prostego zadania w Javie.
Poniżej zadanie i moje rozwiązanie.
Proszę o pomoc i wyjaśnienie kwestii zapisanych w komentarzach i wszelkich uwag o kodzie :)

Napisać klasę Student zawierającą

  1. pola** imię, nazwisko i wiek**,
  2. pole statyczne** nazwaSzkoły**,
  3. konstruktor bezargumentowy – ustawiający domyślne wartości
  4. konstruktor z trzema argumentami odpowiadającymi polom – ustawia wartości pól
  5. metodę **int ileLat() **zwracającą wiek,
  6. nadpisaną metodę **String toString() **zwracającą tekst informacyjny o studencie
    Napisać program wykorzystujący obiekty klasy student. W programie utworzyć kilka obiektów klasy
    Student. Zmienić wartości poszczególnych pól. Za każdy razem wypisywać informację o obiektach na
    ekran.

Moje rozwiązanie, main:

Kopiuj
package treningi;
public class Praktyczny_kurs 
{
	public static void main(String[] args) 
	{
		Student jasiek = new Student();
		// wyswietlenie aktualnej wartosci obiektu:
		jasiek.toString();
		
		Student krzysiek = new Student("Krzysio", "Malinowski", 23);
		// wyswietlenie aktualnej wartosci obiektu:
		krzysiek.toString();		
	}
}

Moja klasa:

Kopiuj
package treningi;
public class Student 
{
	String imie; //ponizej 3 pola
	String nazwisko;
	int wiek;
	
	String nazwaSzkoly; // to ma być pole statyczne - nie wiem o co chodzi :-( utworzylem zwykle.
	
	Student() // konstruktor bezargumentowy – ustawiający domyślne wartości
	{
		imie = "Jasio";
		nazwisko = "Kowalski";
		wiek = 21;
		nazwaSzkoly = "Wysza Szkola Nauki Javy"; // czy to też powinno być w tym konstruktorze?
	}

	Student(String i, String n, int w) // konstruktor z trzema argumentami odpowiadającymi polom – ustawia wartości pól
	{
		this.imie = i;
		this.nazwisko = n;
		this.wiek = w;
	}
	
	int ileLat()
	{
		return wiek; 
		// czy ta metoda zwroci wiek skoro nie przyjmuje zadnych argumentow? 
		//wg mnie tak, wg mnie zwroci aktualna wartosc pola "wiek" ale chce sie upewnic
	}
	
	String toString() // czy to jest metoda nadpisana?
	{
		System.out.println("Student ma na imię: " + imie);
		System.out.println("Student ma na nazwisko: " + nazwisko);
		System.out.println("Student ma : " + wiek);
		System.out.println("Student chodzi do szkoly: " + nazwaSzkoly);
	}	
}

Niestety program nie chce się skompilować, czepia się metody toString, że nie zwraca stringa ale jak te wszystkie informacje o studencie upakować w jednego stringa żeby przekazać go do maina i tam wywołać?

mefisto506
  • Rejestracja:ponad 11 lat
  • Ostatnio:prawie 6 lat
  • Postów:14
1

Jeżeli metoda toString() ma tylko wyrzucać dane studenta to nie ma sensu niczego zwracać do maina, czyli
void toString()

Olamagato
String Object.toString() jest metodą obecną w każdym obiekcie Javy i zawsze zwraca Stringa. Nie da się skompilować bezparametrowej metody z innym typem takim jak void bo w Javie tylko inny typ wyniku nie umożliwia przeciążenia (overload) metody. Można ją tylko przesłonić (override). Ale żeby było to możliwe metoda musi mieć identyczne parametry oraz typ wyniku. Metoda ta jest w istocie operatorem ponieważ kompilator każde wystąpienie obiektu zamiast argumentu String zastępuje wywołaniem obiekt.toString(). Tak więc propozycja do kitu. :)
bogdans
!Ponieważ post dostał plusa (a minusów nie ma), to napiszę w komentarzu: Propozycja jest zła!. Uzasadnienie: patrz poprzedni komentarz.
GC
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 6 lat
  • Postów:249
1
Kopiuj
 
	public String toString() // czy to jest metoda nadpisana?
	{
		return "Student ma na imię: " + imie + "Student ma na nazwisko: "
				+ nazwisko; // i tak dalej
	}
edytowany 1x, ostatnio: gcmarcin
xorgx3
  • Rejestracja:prawie 14 lat
  • Ostatnio:13 dni
  • Postów:134
1

Ja to bym zrobił tak:

Kopiuj
public String toString() // czy to jest metoda nadpisana?
    {
    	String xxx =  ("Student ma na imię: " + imie) + ("Student ma na nazwisko: " + nazwisko) +   ("Student ma : " + wiek)+  ("Student chodzi do szkoly: " + nazwaSzkoly);
		return xxx;
    }    

:D
A potem w mainie wywoływał

Kopiuj
System.out.println(costam.toString)

Co do pytań w kodzie: Pole statyczne to pole wspólne dla wszystkich obiektów tej klasy. Wystarczy napisać

Kopiuj
static String nazwaSzkoly;

Konstruktor domyslny tak na moje oko to powinien ustawiać jakieś puste wartości, ale to w sumie zależy od tego kto pisze/sprawdza. Nazwa szkoly też powinna być w konstruktorze.
Metoda ileLat zwróci aktualny wiek - masz rację.

bogdans
A ja bym w mainie wywołał System.out.println(costam).
BB
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 8 lat
  • Postów:80
0

Dzięki za odpowiedzi!
A o co chodzi z tym "nadpisaniem" metody?
Jakie to ma skutki w kodzie [w moim przypadku] i czym się różni od normalnej metody?
Muszę zrobić wszystkie warunki zadania...

xorgx3
  • Rejestracja:prawie 14 lat
  • Ostatnio:13 dni
  • Postów:134
0

Chodzi o to, że nadpisujesz metodę toString z klasy Object. Po prostu istnieje już metoda o takiej nazwie, ale z innymi argumentami, a Ty ją swoim kodem przeładowujesz.
a jednak nie

edytowany 1x, ostatnio: xorgx3
bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
1

@xorgx3, piszesz głupoty. Nadpisanie to napisanie w klasie pochodnej metody o takiej samej nazwie i takiej samej liście argumentów.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)