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

Pytanie odnośnie mojego rozumienia składowych klasy i obiektów

Object Storage Arubacloud
0 głosów
208 wizyt
pytanie zadane 2 grudnia 2017 w Java przez kauczukk Nowicjusz (220 p.)
edycja 2 grudnia 2017 przez kauczukk

Witam, zanim przyjrzycie się temu pięknie zapisanemu kodowi, który właściwie jest moim pierwszym zapisanym kiedykolwiek samemu bez internetu, z czego się ogromnie cieszę, to narodziły się w mojej głowie pytania, które odnoszą się do klasy Gra. Przy okazji, jak już zerkniecie na ten kod, prosiłbym was o to, abyście napisali mi, co by można było udoskonalić/poprawić by było lepiej, ponieważ nigdy nie pisałem w Javie sam ani nie miałem styczności z programowaniem obiektowym, więc każda opinia się przyda. Dziękuję.

1. Obiekt p1 korzysta z metody klasy Gracz do wpisywania liczb, czyli w ten sposób tylko dla obiektu p1 wywodzącego się z klasy Gracz ta liczba jest określona? linia 88
Jaka byłaby różnica między p1.liczbazgadywana a Gracz.liczbazgadywana? linia 90

2. Czy te składowe są w takim razie potrzebne w klasie Komputer:

Gracz d1 = new Gracz();
int liczbadosprawdzenia=d1.liczbazgadywana;


kod:

 

import java.util.Scanner;


public class Gracz {


	static String podaneimie;
	public static int liczbazgadywana;
	Scanner odczyt = new Scanner(System.in);
	
	void wpisujeLiczbe(){

		System.out.println("Gracz o imieniu "+podaneimie+" wpisuje liczbe:");
		liczbazgadywana = odczyt.nextInt();
		System.out.println("Wpisana liczba to: "+ liczbazgadywana);
		System.out.println("");
		
	}//koniec metody wpisujeLiczbe
	
	void podajeSwojeImie() {
		System.out.println("Graczu, podaj swoje imie: ");
		podaneimie=odczyt.nextLine();
		System.out.println("Gracz podał swoje imie, czyli "+podaneimie+".");
		System.out.println("");
		System.out.println("Witaj "+podaneimie + "!");
		System.out.println("");
		
	}//koniec metody wpisania imienia
	
	
}//koniec klasy Gracz

//----------------------------------------------------

public class Komputer {
	
	static int liczbalosowa;
	Gracz d1 = new Gracz();
    int liczbadosprawdzenia=d1.liczbazgadywana;

	
	int losuje() {
		System.out.println("Komputer losuje liczbe z przedzialu od 0 do 20...");
		liczbalosowa=(int)(Math.random()*20);
		System.out.println("Komputer wylosowal liczbe "+ liczbalosowa + "    <-----------------(Gracz o tym nie wie)");
		System.out.println("*****************************************************************************************");
		return liczbalosowa;
		
	} // koniec metody losowania
	
	
	void sprawdza(int liczbadosprawdzenia) {
		
				if(liczbadosprawdzenia==liczbalosowa) {
						System.out.println("Gracz o imieniu "+Gracz.podaneimie+" wygrał!");
						System.out.println("");

					}
		
				if(liczbadosprawdzenia>liczbalosowa) {
								System.out.println("To za duzo!");
								System.out.println("");
					}
		
				if(liczbadosprawdzenia<liczbalosowa) {
									System.out.println("To za malo!");
									System.out.println("");
						}
	
		}//koniec metody sprawdzania
	
}//koniec klasy Komputer

//----------------------------------------------------

public class Gra {

	void rozpoczyna() {
		Gracz p1 = new Gracz();           
		Komputer maszyna=new Komputer(); 
		
			
			p1.podajeSwojeImie();    
			maszyna.losuje();        
			
			while(Gracz.liczbazgadywana!=Komputer.liczbalosowa) {     
				
				p1.wpisujeLiczbe();                                  
				
				maszyna.sprawdza(p1.liczbazgadywana);   //lub Gracz.liczbazgadywana?           
			}
	}
}//koniec klasy Gra

//----------------------------------------------------

public class Test {
	public static void main(String[] args) {
		Gra losowanie=new Gra();
		losowanie.rozpoczyna();
	}
}//koniec klasy Test

 

1 odpowiedź

0 głosów
odpowiedź 2 grudnia 2017 przez ShiroUmizake Nałogowiec (46,300 p.)
wybrane 3 grudnia 2017 przez kauczukk
 
Najlepsza

Zacznijmy od:

-nie piszemy tak: jakiespoleobiektu tylko: jakiesPoleObiketu . Konwencja ;)

Pola  powinny być prywatne (Wszyskite). Gdyż nie stanowią jakieś przetrzeni nazw, nie są klasą o typie enum, pola statycznymi.  

-Klasy robią to co nie powinny. Czy w rzeczywistości gracz, potrafi sobie nadać imię (prawnie). Nie umie. Powinnen tym zajmować jakiś serwis. A pole imię pownno być obiektem domenowym.

-Dlaczego są to  pola statyczne ?? -->  static String podaneimie , public static int liczbazgadywana

 -Klasa kompiter nie najlepiej obrazuje to co robi komputer, lepsza nazwa maszyna(sam ją właściwie pod tą nazwą tworzysz)

Mało isttone na tym etapie. Ale..brak getterów i setterów.

 

System.out.println("");

                    }

Nie musisz w ten sposób rozdzielać kolejną linijką użyj "\n";

Brak obsługi wyjątków!

Unikaj wypisywanie  zależności lepiej opisać(w jakieś metodzie) co sprawdzasz np w while: !czyLiczbySaTakieSame().

1. TAK

2.TAK

3.TAK

Jakby było inaczej już na sam start byś dostał wyjątki typu: nullPointerException.

Trochę za mało kodu, by stwierdzić jakieś większe uchybenia w  opgramowaniu ;d.

komentarz 2 grudnia 2017 przez kauczukk Nowicjusz (220 p.)
" -Dlaczego są to pola statyczne ? "

Właściwie sam nie wiem, Eclipse mi tak podpowiedział no a ja newbie to tak zrobiłem:D

 

"  -Klasa kompiter nie najlepiej obrazuje to co robi komputer, lepsza nazwa maszyna(sam ją właściwie pod tą nazwą tworzysz) "

 

Wiem, chodziło mi o to, ze komputer losuje, coś takiego.

Podobne pytania

0 głosów
2 odpowiedzi 180 wizyt
0 głosów
0 odpowiedzi 333 wizyt
pytanie zadane 26 czerwca 2021 w Java przez ITshnyk Obywatel (1,800 p.)
0 głosów
1 odpowiedź 163 wizyt

92,551 zapytań

141,393 odpowiedzi

319,522 komentarzy

61,936 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!

...