IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
tygrtom007
Člen
Avatar
tygrtom007:5.10.2014 16:43

Ahoj, potřebuji poradit s programem, asi to není nic závažného ale vyhazuje mi to pořád:
Exception in thread "main" java.lang.NullPo­interException
at randomtrygame­.Hrdina.utocNa(Hrdi­na.java:129)
at randomtrygame­.RandomTryGame­.main(RandomTry­Game.java:28)
Java Result: 1
Třída main:

package randomtrygame;

import java.util.Scanner;
public class RandomTryGame {


    public static void main(String[] args) {
       Kostka1 kostka64 = new Kostka1(64);
       Scanner sc = new Scanner(System.in, "Windows-1250");
       System.out.println("Vyber si hrdinu: Hrdina1 - 1, Hrdina2 - 2, Hrdina3 - 3.");
       Hrdina tvuj = new Hrdina (Integer.parseInt(sc.nextLine()));
       if (tvuj.vratZpravu().equals("Neplatná volba"))
           {
               System.out.println("Probléém.");
               System.exit(0);
           }
       System.out.println("Tvuj hrdina " + tvuj.vratZpravu());
       Hrdina nekdo3 = new Hrdina("Nepritel",80,30,30,10);
       System.out.println(tvuj.vypisHrdinu());
       System.out.println(nekdo3.vypisHrdinu());

       System.out.println(tvuj.utocNa(nekdo3));
}
}

A třída hrdiny

public class Hrdina {
        protected String Jmeno;
        protected int Zivoty;
        protected int maxZivoty;
        protected int utokMax;
        protected int utokMin;
        protected int Obrana;
        protected static Kostka1 kostka64;
        protected String Zprava;
        protected String Seznam;
        protected int Armor;
        protected int utokBez;
        protected int utokKrit;
        protected int Sance;
    public Hrdina(String jmeno, int zivot, int utok, int obrana, int krit)
    {
            this.Jmeno = jmeno;
            this.Zivoty = zivot;
            this.maxZivoty = zivot;
            this.utokMax = utok + 5;
            this.utokMin = utok;
            this.Obrana = obrana;
            this.kostka64 = kostka64;
            this.utokBez = 2;
            this.utokKrit = krit;
            Armor = 0;
            Seznam = String.format("%s má %d/%d HP. Utok: %d-%d, Obrana: %d. Brnění : %d. ",Jmeno,Zivoty,maxZivoty,utokMin,utokMax,Obrana,Armor);
    }
    public Hrdina(int volba)
    {
            if (volba == 1)
            {
                this.Jmeno = "Hrdina1";
                this.Zivoty = 60;
                this.maxZivoty = 60;
                this.utokMin = 35;
                this.utokMax = 40;
                this.Obrana = 35;
                this.kostka64 = kostka64;
                this.utokBez = 2;
                this.utokKrit = 10;
                Armor = 0;
                Seznam = String.format("%s má %d/%d HP. Utok: %d-%d, Obrana: %d. Brnění : %d. ",Jmeno,Zivoty,maxZivoty,utokMin,utokMax,Obrana,Armor);
            }
            if (volba == 2)
            {
                this.Jmeno = "Hrdina2";
                this.Zivoty = 100;
                this.maxZivoty = 100;
                this.utokMax = 30;
                this.utokMin = 25;
                this.Obrana = 25;
                this.kostka64 = kostka64;
                this.utokBez = 2;
                this.utokKrit = 10;
                Armor = 0;
                Seznam = String.format("%s má %d/%d HP. Utok: %d-%d, Obrana: %d. Brnění : %d. ",Jmeno,Zivoty,maxZivoty,utokMin,utokMax,Obrana,Armor);
            }
            if (volba == 3)
            {
                this.Jmeno = "Hrdina3";
                this.Zivoty = 80;
                this.maxZivoty = 80;
                this.utokMax = 35;
                this.utokMin = 30;
                this.Obrana = 30;
                this.kostka64 = kostka64;
                this.utokBez = 2;
                this.utokKrit = 10;
                Armor = 0;
                Seznam = String.format("%s má %d/%d HP. Utok: %d-%d, Obrana: %d. Brnění : %d. ",Jmeno,Zivoty,maxZivoty,utokMin,utokMax,Obrana,Armor);
            }
            if (volba == 1 || volba == 2 || volba == 3)
            {
                nastavZpravu(vypisHrdinu());
            }
            else //(volba != 1 || volba != 2 || volba != 3)
            {
                nastavZpravu("Neplatná volba");
            }
    }
    public boolean nazivu()
    {
            return Zivoty > 0;
    }
    @Override
    public String toString()
    {
            return Jmeno;
    }
    public void nastavZpravu(String zprava)
    {
            this.Zprava = zprava;
    }
    public String vratZpravu()
    {
            return Zprava;
    }
    public String nastavVratZpravu(String zprava)
    {
        this.Zprava = zprava;
        return Zprava;
    }
    public String vypisHrdinu()
    {
            return (Seznam + jeNazivu());
    }
    public String jeNazivu()
    {
        if (nazivu() == true)
        {
            return "Je naživu, zatím.";
        }
        else
        {
            return "Už je mrtvej.";
        }
    }
    public String utocNa(Hrdina souper)
    {
        int Uder = utokBez;
        Sance = 2;
        if (Sance == kostka64.hod(8)+1) //Sance == 1 || Sance == 2)
        {
            Uder = (kostka64.hodVlastni(utokMin, utokMax)) + (kostka64.hod(utokKrit));
        }
        else
        {
            Uder = kostka64.hodVlastni(utokMin, utokMax);
        }
            souper.branSe(Uder);
            return (String.format("%s útočí s úderem za %s hp", Jmeno, Uder));
    }
     private void branSe(int uder)
    {
        int zraneni = uder - ((Obrana + Armor)/3);
        if (zraneni > 0)
        {
                Zivoty -= zraneni;
                Zprava = String.format("%s utrpěl zranění %s hp", Jmeno, zraneni);
                if (Zivoty <= 0)
                {
                        Zivoty = 0;
                        Zprava += " a zemřel";
                }
        }
        else
        {
            Zprava = String.format("%s odrazil útok", Jmeno);
        }
        nastavZpravu(Zprava);
    }
    public String ukazZivoty(Hrdina hrdina)
    {
        return String.format("%s má %d/%d HP.", Jmeno, Zivoty, maxZivoty);
    }
}
 
Odpovědět
5.10.2014 16:43
Avatar
tomisoka
Tvůrce
Avatar
tomisoka:5.10.2014 17:22

"kostka64" odkazuje na null

this.kostka64 = kostka64;

"this.kostka64" odkazuje na "kostku64" v objektu, "kostka64" odkazuje na "kostka64" v metodě - pokud existuje, jinak je to to samé jako "this.kostka64" (což je tvůj případ)

Editováno 5.10.2014 17:25
 
Nahoru Odpovědět
5.10.2014 17:22
Avatar
tygrtom007
Člen
Avatar
tygrtom007:5.10.2014 17:44

A jak se to dá vyřešit?

 
Nahoru Odpovědět
5.10.2014 17:44
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na tygrtom007
Jan Vargovský:5.10.2014 17:49

Vytvoř jí např. v statickém konstruktoru, nebo předej v konstruktoru jako všem ostatním, nebo si jí vytvoř v normálním konstruktoru.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
5.10.2014 17:49
Avatar
tygrtom007
Člen
Avatar
Odpovídá na Jan Vargovský
tygrtom007:5.10.2014 18:18

Dík. Změnil jsem protected Kostka kostka64; na protected static Kostka kostka64; a funguje to. Moc jste mi pomohli. Už dva dny jsem si s tim nevěděl rady.

 
Nahoru Odpovědět
5.10.2014 18:18
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.