Kann mir jemand bei einem Informatik Java Projekt helfen?
Hi,
für die Schule muss ich in Informatik ein einfaches Textadventure in Java (BlueJ) coden, Thema "Magier und Schwertkämpfer". Beim Erstellen eines neuen Objekts aus einer der beiden Klasse "magier" und "schwertkämpfer" über ein Objekt der Klasse "gamemanager" hakt es bei mir und ich habe nicht die expertise zu sagen, warum kein neues Objekt erstellt werden kann. Die beiden Klassen magier und schwertkämpfer bekommen die Grundattribute aus der Klasse "rolle" vererbt. Nach der Auswahl der Klasse soll auch ein Name ausgewählt werden können, die Attribute "Dm" und "Hp" sind je nach Klasse vorgegeben.
(Die Konstruktoren und Methoden von magier und schwertkämpfer sind gleich)
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);
}
}
}
Code nicht vollständig - 3000zeichen
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...?
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;
Du legst den Spieler an und rufst dann den Konstruktor nochmal so auf? Ich denke mal, dass er dir hier ggf. rausfliegt..

du kannst auch den Code in deine Frage reinschreiben, nutzt aber bitte die ,,Quellen"-Option dabei! Und unterteile ihn auch angemessen
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.
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).
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.
https://docs.google.com/document/d/e/2PACX-1vRhBL_7Q9vi2AuZuQoKfeEnxsyWLHsZt3ZFb0Yn8OtN7gY-SQpwtaG5zrsQOLePTuwpSpM9JTfrFV4v/pub
Ich kenne auch keine besseren Services, um den Code zu verlinken
Aber schonmal danke für die bereits gegebenen Tips