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

question-closed Kontruktor problem

VPS Starter Arubacloud
+1 głos
279 wizyt
pytanie zadane 10 października 2018 w Java przez hans001 Obywatel (1,150 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 Szeryf (79,280 p.)
Jak coś to wystarczy Ci jeden obiekt Scanner.
komentarz 11 października 2018 przez kejm_ Bywalec (2,310 p.)
edycja 11 października 2018 przez kejm_

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 Szeryf (79,280 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 kejm_ Bywalec (2,310 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 Obywatel (1,150 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 kejm_ Bywalec (2,310 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 Szeryf (79,280 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 kejm_ Bywalec (2,310 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 Szeryf (79,280 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 kejm_ Bywalec (2,310 p.)
Rzecz jasna źle się wyraziłem. Powinno być "Mogłaby"

Podobne pytania

0 głosów
2 odpowiedzi 153 wizyt
pytanie zadane 1 października 2018 w C i C++ przez Sic Dyskutant (8,510 p.)

92,452 zapytań

141,262 odpowiedzi

319,077 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...