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

question-closed Kontruktor problem

+1 głos
102 wizyt
pytanie zadane 10 października 2018 w Java przez hans001 Początkujący (470 p.)
zamknięte 10 października 2018 przez hans001

Witam. Chciałbym aby wybrane "inty"  przechodziły mi do konstruktora, jednak tym spodobem wyskakuj mi komunikat że wypisanne do konstruktora zmienne nie zostaly zainicjalizowane. Wytlumaczy mi ktoś w czym jest problem i jak to poprawić? 

import java.util.Scanner;

public class GRA {
	
	static Scanner userInput = new Scanner(System.in);
	static Scanner userInput1 = new Scanner(System.in);
	
	

	public static void main(String[] args) {
		
		
		
		
		System.out.println("Wybierz klase postaci : ");
		System.out.println("Nacisnij 1 aby wybrac Wojownik");
		System.out.println("Nacisnij 2 aby wybrac Lotrzyka");
		System.out.println("Nacisnij 3 aby wybrac Gibon Alfa");
		
		int wybor  = userInput.nextInt();
		
		System.out.println("Podaj nazwa postaci: ");
		String nazwa = userInput1.nextLine();
		
		int hp;
		int attack;
		int armor;
		
		if(wybor == 1) { 
			 hp = 100;
			 attack = 8;
			 armor = 5;
		
		}
		else if(wybor == 2) {
		     hp = 70;
			 attack = 13;
			 armor = 4;
		}
		else if(wybor == 3) {
			 hp = 85;
			attack = 9;
			 armor = 7;
		}
		else {
			System.out.println("Blad");
		}
		
		
		HEROS bohater = new HEROS(nazwa, hp, attack, armor);
		
		

	}

}

 

komentarz zamknięcia: Znalazłem odpowiez
komentarz 11 października 2018 przez mbabane Maniak (65,900 p.)
Jak coś to wystarczy Ci jeden obiekt Scanner.
komentarz 11 października 2018 przez Kamil Błaszczyk Obywatel (1,830 p.)
edycja 11 października 2018 przez Kamil Błaszczyk

Ja bym rozwiązał to w ten sposób, jednak masz kilka błędów oczywistych, a konstruktory tak nie działają. 

Mam nadzieję, że docenisz moje uwagi bo poświęciłem na to chwilę. Miłego Dnia Hans001

  • Nazwy klas piszemy z wielkiej litery, reszta mała. To taki dogmat bo potem budujesz klasy o nazwach np: KlasaTestowa, a nie KLASATESTOWA etc. Złe nawyki zostają w ludziach na długo. (Łatwo nauczyć się palić, gorzej rzucić)

  • Pisz obiektowo, konstruktor deklarujesz w klasie Hero, konstruktor parametrowy.

  • Dodatkowo Class Hero powinna dziedziczyć po innej klasie, albo implementować interfejs, jeśli ma być więcej postaci kiedyś. 

import java.util.Scanner;

public class GRA {

    public static void main(String[] args) {

        int hp=0;
        int attack=0;
        int armor=0;
        String imie;
        Scanner load = new Scanner(System.in);

        System.out.println( "\n" + "Wybierz klase postaci : " + "\n");
        System.out.println("Nacisnij 1 aby wybrac Wojownik");
        System.out.println("Nacisnij 2 aby wybrac Lotrzyka");
        System.out.println("Nacisnij 3 aby wybrac Gibon Alfa");

        int wybor  = load.nextInt();

        switch(wybor){
            case 1:
                hp = 100;
                attack = 8;
                armor = 5;
                System.out.println("Wybrałeś wojownika" + "\n");
                break;
            case 2:
                hp = 70;
                attack = 13;
                armor = 4;
                System.out.println("Wybrałeś łotra" + "\n");
                break;
            case 3:
                hp = 85;
                attack = 9;
                armor = 7;
                System.out.println("Wybrałeś Małpę gibon" + "\n");
                break;
            case 4:
                System.exit(0);
                break;
        }

        System.out.println("Podaj imię postaci: ");
        Scanner load2 = new Scanner(System.in);
        imie  = load2.nextLine();
        System.out.println(imie +" Stawaj do walki ;D");
        System.out.println(imie +" Twoje moce to: " + "\n");
        System.out.println("życie: " + hp);
        System.out.println("atak: " + attack);
        System.out.println("zbroja: " + armor);


    }

}

 

komentarz 11 października 2018 przez mbabane Maniak (65,900 p.)

Dodatkowo Class Hero powinna dziedziczyć po innej klasie, albo implementować interfejs, jeśli ma być więcej postaci kiedyś. 

Jeśli tylko się da to unikaj dziedziczeń. (tak jeszcze na marginesie zadam pytanie pomocnicze. Co to znaczy powinna?) Wszystko zależy od rozwiązywanego problemu. Jeśli jest to konieczne i potrzebne to tak, jeśli są dobre argumenty żeby tego nie zrobić również jest to poprawne. I ostatnia rzecz trzeba wiedzieć co się robi, jeśli ktoś czegoś nie rozumie i nie wie dlaczego tak ma być, to lepiej będzie jeśli zrobi to coś, powiedzmy, w nie do końca zalecanych praktykach, ale tak żeby mógł się w tym odnaleźć i wytłumaczyć, dlaczego tak a nie inaczej - to jest  według mnie najlepsze rozwiązanie.

komentarz 11 października 2018 przez Kamil Błaszczyk Obywatel (1,830 p.)
Według mnie każda konstruktywna podpowiedź jest dobra, Jeśli ktoś poświęca czas i chęci pisząc, pomagając komuś to robi dobrze. Zresztą pomyślałem, że pisząc o dziedziczeniu etc. skłonie kolegę do zrozumienia tego.

Mbabane dlaczego unikać dziedziczenia ? Co w nim takiego złego ?
komentarz 11 października 2018 przez hans001 Początkujący (470 p.)
edycja 11 października 2018 przez hans001

Dzięki za odpowiedzi, mam jeszcze kilka pytan.

1 gdzie umiescic ten konstruktor aby przypisywal mi te statystyki na podstawie wybranej klasy postaci

2. Czy jak stworze obiekt klasy hero w mainie to czy  bede mogl uzyc jego metod i argumetow w innych klasach?

 

komentarz 11 października 2018 przez Kamil Błaszczyk Obywatel (1,830 p.)
Zbadaj ten kod, który napisałem. Zmieniłem Twoją instrukcję na Switcha.

Może jak później znajdę czas napiszę to obiektowo.

Jeśli chodzi o Twoje pytania to powiem, że odpowiedzi zależne są od koncepcji całej apki. Jeśli chodzi o metody i konstruktor to je deklarujesz w klasie, a później w klasie testowej budujesz instancje tej klasy, czyli wywołujesz obiekty. Rzecz jasna na obiekcie możesz wykonywać te metody.

Musisz od początku zrozumieć, że java jest czysto obiektowa i pisanie wszystkiego w jednym pliku,klasie mija się z celem.
komentarz 11 października 2018 przez mbabane Maniak (65,900 p.)

Przy nadmiernym dziedziczeniu kod może się bardzo zagmatwać i być trudny w utrzymaniu. Może być także trudny do przetestowania. Jednym z przykładów złego wpływu dziedziczenia może być fakt, że jakaś podklasa nie będzie potrzebowała danego zachowania:

class Kaczka
{
     public void lec()
     {
          }
}

class GumowaKaczka extends Kaczka
{
     //gumowa kaczka nie moze latać
}

class DzikaKaczka extends Kaczka
{
      //taka kaczka moze latac
}

I owszem jeśli jest to tylko jeden przypadek i na pewno jeden to zawsze można zrobić to tak:

class GumowaKaczka extends Kaczka
{
    @Override
     public void lec()
     {
          // jakas implementacja ktora powoduje ze oryginalne latanie jest zablokowane
      }
}

Jednak kiedy projekt będzie się rozrastał i zaczniesz dokładać kolejne kaczki, które nie potrafią latać - to jesteś w biedzie bo trzeba wszytko sprawdzać (np. co jeśli jest więcej metod ogólnych w Kaczka i któraś z podkaczek tego nie umie). Z dziedziczeniem trzeba po prostu uważać bo może ono zagmatwać sytuację.

komentarz 14 października 2018 przez Kamil Błaszczyk Obywatel (1,830 p.)
Okay, ale to zwyczajnie oczywiste, po prostu trzeba wiedzieć kiedy dziedziczenie używać i tyle. Ale samo w sobie nie jest złe i jest tak samo potrzebne jak wszystko inne. Jemy zupę łyżką, a nie widelcem.
komentarz 14 października 2018 przez mbabane Maniak (65,900 p.)

Nie pisałem, że jest złe. A Ty napisałeś, że powinno, co można uznać, że dziedziczenia trzeba używać zawsze i wszędzie:

Dodatkowo Class Hero powinna dziedziczyć po innej klasie

 Zadam to jeszcze raz. Co to znaczy powinna?

1
komentarz 15 października 2018 przez Kamil Błaszczyk Obywatel (1,830 p.)
Rzecz jasna źle się wyraziłem. Powinno być "Mogłaby"

Podobne pytania

0 głosów
2 odpowiedzi 109 wizyt
pytanie zadane 1 października 2018 w C i C++ przez Sic Mądrala (7,280 p.)
0 głosów
1 odpowiedź 29 wizyt
pytanie zadane 12 kwietnia w Java przez Paweł123 Nałogowiec (26,760 p.)
0 głosów
1 odpowiedź 35 wizyt
pytanie zadane 10 kwietnia w Java przez kvbq Obywatel (1,280 p.)
Porady nie od parady
Zadając pytanie postaraj się o poprawną pisownię i czytelne formatowanie tekstu.Kompozycja

62,317 zapytań

108,448 odpowiedzi

226,391 komentarzy

35,102 pasjonatów

Przeglądających: 258
Pasjonatów: 19 Gości: 239

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.

...