• 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

Ultraszybki serwer VPS NVMe BIZNES
0 głosów
111 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 (32,490 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
1 odpowiedź 55 wizyt
+1 głos
1 odpowiedź 69 wizyt
pytanie zadane 8 kwietnia 2016 w PHP, Symfony, Zend przez Niespecjalny Gaduła (4,200 p.)
Porady nie od parady
Zadając pytanie postaraj się o odpowiedni tytuł, kategorię oraz tagi.
Ciekawy innych porad? Odwiedź tę stronę!

44,251 zapytań

84,047 odpowiedzi

167,336 komentarzy

21,161 pasjonatów

Przeglądających: 189
Pasjonatów: 7 Gości: 182

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...