Kann mir jemand bei einem Informatik Java Projekt helfen?


23.08.2023, 17:52

public class gamemanager
{

    rolle gegner;
    rolle spieler;


    public void starten()
    {
        klassewählen();
        kampf();
    }
    
    public void kampf()
    {
        int attackeGegner;
        System.out.println(" ");
        System.out.println("Wähle deinen Angriff:");
        System.out.println("Drücke 1 für einen " + spieler.attacke1);
        angriff();
        System.out.println(" ");
        System.out.println("Jetzt ist der " + gegner.name + " dran");
        attackeGegner = zufallszahl.nextInt(0) + 1;
        if(attackeGegner == 1)
        {
            
            System.out.println("Der " + gegner.name + " setzt " + gegner.attacke1 + " ein!");
            spieler.Hp = spieler.Hp - gegner.Schaden
        }
    }
    
    public void angriff()
    {
        if(scanner.nextInt() == 1)
        {
            attacke1();
        }
        
        }
    }
    
    public void attacke1()
    {
        gegner.Hp = gegner.Hp - spieler.Schaden()
    }
    

    
    public void klassewählen()
    {
        int gewählteKlasse;
        System.out.println("Wähle deine Klasse aus:");
        System.out.println("Drücke 1 für Schwertkämpfer");
        System.out.println("Drücke 2 für Magier");
        gewählteKlasse = scanner.nextInt();
        if(gewählteKlasse == 1)
        {
            System.out.println(" ");
            System.out.println("Wähle den Namen für deinen Schwertkämpfer");
            String name = scanner.nextLine();
            schwertkämpfer spieler = new schwertkämpfer("name", 100, 15);
            magier gegner = new magier("Magier", 70, 20);
        }
        
    }
    
    


}

23.08.2023, 17:53

Code nicht vollständig - 3000zeichen

jo135  23.08.2023, 17:10

Die Fehlermeldung sagt genau, in welcher Klasse, Methode und in welcher Zeile die NPE passiert, und welches Feld null ist. Und du zeigst konsequent genau diese Datei nicht...?

DrJekll 
Fragesteller
 23.08.2023, 17:14

Das ich das konsequent nicht zeige, ist keine Absicht, der Fehler ist mir nicht so peinlich, dass ich die Lösung absichtlich verstecken würde.

2 Antworten

Wo ist denn die Main, wo das ganze beginnt?

Es sieht mir hier aus, als wenn du einfach auf ein Spielerobjekt zugreifen willst, aber gar keins erstellt hast. Deshalb wäre dieser dann Null.

Den Konstruktor des Schwertkämpfers sollte hier auch public sein, sonst hast du eine Zugriffsverletzung.

Am besten aber, lädst du deinen ganzen Code irgendwo hin und zeigst ihn uns - so ist es enorm anstrengend und ein Ratespiel.

//EDIT: Ich sehe einzelne Fehler, aber wie gesagt, die sind wirklich schwer so zu finden;

Bild zum Beitrag

Du legst den Spieler an und rufst dann den Konstruktor nochmal so auf? Ich denke mal, dass er dir hier ggf. rausfliegt..

 - (Schule, Informatik, Java)
DrJekll 
Fragesteller
 23.08.2023, 17:21

oh, das ist von meiner seite aus schlecht benannt. der "konstruktor", den man da sieht, ist eine methode im gamemanager, der den selben inhalt hat wie das auskommentierte darüber. ich hatte gedacht, dass die erstellung eines objekts innerhalb der if-abfrage es eventuell irgendwie nur innerhalb dieser abfrage zugreifbar macht (wie temporäre variablen innerhalb solcher abfragen oder schleifen).

0
Dultus, UserMod Light   23.08.2023, 17:23
@DrJekll

Ich kann dir so die Frage nicht beantworten, tut mir Leid. ^^
Der Code ist für mich unlesbar, da kommen dann nur halbgare Antworten bei raus.

0
jo135  23.08.2023, 17:22
Den Konstruktor des Schwertkämpfers sollte hier auch public sein, sonst hast du eine Zugriffsverletzung.

Da sich das alles wohl im selben Package abspielt, sollte das kein Problem sein.

0
Dultus, UserMod Light   23.08.2023, 17:23
@jo135

Ah, gut, das habe ich nicht gesehen.

Deshalb ignoriere ich normalerweise solche Fragen. Es ist einfach nur anstrengend. ^^

1
jo135  23.08.2023, 17:24
@Dultus, UserMod Light

Manche Fragesteller scheinen das eher als spannende Rätselaufgabe fürs GF-Publikum zu sehen :-)

0

Das Feld "spieler" in der Klasse gamemanager wird niemals gesetzt. Wie die Fehlermeldung bereits klar sagt: es ist null, daher die NullPointerException beim Versuch, das Feld spieler.attacke1 zu lesen.

Du legst zwar davor in der Methode klassewählen() diverse Objekte an ("spieler", "gegner"), aber nur als lokale Variablen, die niemals verwendet werden.