Variable die eine Klasse enthält ändern Problem

Manderda

Mitglied
Hallo nochmal,
Hätte da mal wieder ne Frage.
Also:
Ich hab mal ne Frage welche Lösungsvorschläge ihr Für mein Problem habt.
Ich möchte die Variable aktuellerNPC ändern diese enthält den NPC der aktuell verwendet werden soll.
Nun weiß ich nicht genau wie ich das mit den Räumen vereinen soll.
Hier ist erstmal mein Quelltext:
Java:
class Spiel 
{
    private Raum aktuellerRaum; //der Aktuell verwendete Raum
    private NPC aktuellerNPC;    // der Aktuell verwendete NPC
    private String x; //eine Hilfsvariable
  
    public Spiel() 
    {
        NPCerstellen();
        raeumeAnlegen();
    }

    private void raeumeAnlegen()
    {
        Raum Test
        TestRaum = new Raum("Test Beschreibung", ); //hier sollte dann noch die Information zu dem NPC hinzu
    }
    private void NPCerstellen() //erstellt einen NPC
    {
        NPC Test;
        
        Test = new NPC();
        Test.befuellen("hallo","Hallo, ich bin ein Test NPC."); //befüllt eine HashMaP
        Test.befuellen("kaufen", "Ich kann noch nichts verkaufen.");
    }
    private void wechsleRaum(Befehl befehl) //Befehl ist 
    {
        if(!befehl.hatZweitesWort()) //unwichtig
        {
            // Gibt es kein zweites Wort, wissen wir nicht, wohin...
            System.out.println("Wohin möchten Sie gehen?");//unwichtig
            return; //unwichtig
        }

        String richtung = befehl.gibZweitesWort(); //erstmal unwichtig
    
        naechsterRaum = aktuellerRaum.nextRaum(richtung);
        Raum naechsterRaum = null;

        x = aktuellerRaum.gibnpc(); //Variable x als Platzhalter
        if ( x.equals(null)) //soll gucken ob x null ist
         {
             aktuellerNPC = null;
         }
         else 
         {
             aktuellerNPC = x; //hier liegt mein Problem, Ich kriege es nicht hin hier den NPC der Variable aktuellerNPC hinzuzufügen
         }
            

        

        if (naechsterRaum == null) //unwichtig
        {
            System.out.println("Dort ist keine Tür!");//unwichtig
        }
        else {//unwichtig
            aktuellerRaum = naechsterRaum; //unwichtig
            System.out.println("Sie " + aktuellerRaum.gibBeschreibung()); //unwichtig
            System.out.print("Ausgänge: "); //unwichtig
            System.out.println(aktuellerRaum.gibAusgaenge()); //unwichtig
            System.out.println(); //unwichtig
        }
    }
}

Und hier von der Klasse raum
Java:
import java.util.*;

class Raum 
{
    private String beschreibung;
    private HashMap<String, Raum> ausgaenge;
    private String npc;

   
    public Raum(String beschreibung, String npc) //habe jetzt erstmal String genommen, geht aber so nicht
    {
        this.beschreibung = beschreibung;
        this.npc = npc;
        ausgaenge=new HashMap<String, Raum>();
    }

    
    public void setzeAusgang(String richtung, Raum ausgang)
    {
        ausgaenge.put(richtung, ausgang);
    }

    
    public String gibBeschreibung()
    {
        return beschreibung;
    }
    
    public String gibnpc ()
    {
        return npc;
    }
}
Bei Fragen gerne fragen^^
MfG

Edit: Methode erstelleNPC hinzugefügt
 
Zuletzt bearbeitet:
G

gman

Gast
Hi,

deine Klasse "Raum" hat als Datentyp für einen NPC "String". Nimm doch denselben Datentyp/Klasse
wie in der Klasse "Spiel" (NPC). Dann müsste die Zuweisung klappen.
 

Manderda

Mitglied
also verstehe deine kurze Antwort nicht ganz^^
aber ich kann ja nicht
Java:
aktuellerNPC.irgentwas
machen, da ich ja in einem Raum einen NPC anhängen will und dafür dem Aktuellen Raum eine Information anhängen will wo drin steht ob und welcher NPC in dem Raum vorhanden ist. Nur ich weiß nicht in welcher Form diese Information sein muss damit ich dann die Variable "aktuellerNPC" dahin ändern kann. Hoffe so wird es etwas klarer...
 
G

gman

Gast
Ändere den Datentyp von "npc" in der Klasse "Raum" auf "NPC" und füge noch eine Setter-Methode
dafür hinzu, oder vielleicht reicht auch das Setzen des npc im Konstruktor.

Setter-Methode:

Java:
public NPC setNpc(NPC newNpc){
    this.npc = newNPC;
}
 

Manderda

Mitglied
@ gman: Wenn ich das mache un dann in Zeile 16 von der Klasse Spiel nach dem Komma "Test" schreibe, also wie der NPC heißt sagt mir der Kompiler das er die Variable nicht kennt
und wenn noch ne Frage, wie soll ich die Methode gibnpc dann ändern, da es ja kein String mehr ist. Void geht ja nicht wirklich da man dort kein return machen kann.

Edit:
Die Setter Methode versteh ich nicht ganz, wo sollte die den hin. und das alleinige Umstellen im Konstuktor von Raum auf NPc reicht leider nicht.
 
Zuletzt bearbeitet:
G

gman

Gast
- "Test" ist ein String, der Konstruktor von Raum erwartet nach der Änderung aber natürlich ein "NPC"

[JAVA=16]
Raum Test = new Raum("Test Beschreibung", new NPC(<Argumente des Konstruktors>));
[/code]

Da ich die Klasse "NPC" nicht kenne, weiß ich auch nicht was für Argumente der Konstruktor erwartet :noe:

- gibnpc: Wenn du den Datentyp von "npc" auf "NPC" änderst, musst du natürlich in der Methode
auch "NPC" als Rückgabedatentyp angeben.

- Die Setter-Method gehört natürlich in die Klasse "Raum" rein, den dort willst du doch den NPC ändern.
 

Manderda

Mitglied
also in etwa so:
Java:
public Raum(String beschreibung, NPC npc) 
    {
        this.beschreibung = beschreibung;
        this.npc = npc;
        ausgaenge=new HashMap<String, Raum>();
    }

    public NPC gibnpc ()
    {
        return npc;
    }

Das hat er bei mir jedenfalls kompiliert.
Wenn das so Richtig ist hät ich da noch ne Frage.
Bei der Klasse Spiel in Zeile 16:
[JAVA=16]
TestRaum = new Raum("Test Beschreibung", Test);
[/code]

muss das da so, weil Test ja in diesem Fall ein NPC ist und ich ihm den Raum anhängen will, bei mir kommt jedoch eine Fehler Meldung das er die Variable Test nicht kennt.
 
G

gman

Gast
Naja, bisher hast du ja einfach nur "Test" dahin geschrieben. Du musst aber ein Objekt vom Typ "NPC"
übergeben. Da ich mal davon ausgehe das du zu dem Zeitpunkt noch kein solches Objekt hast, musst
du wie im vorherigen Post beschrieben ein neues Objekt erzeugen.
Und wie gesagt musst du dir den Konstruktor der Klasse "NPC" anschauen.
 

Manderda

Mitglied
Zu dem Teitpunkt existirt doch schon ein Objekt mit den Namen Test von der Klasse NPC, da ich im Konstructor von Spiel die Methode NPCerstellen() aufrufe wo ein NPC mit dem Namen Test erstellt wird.

Hier mal der Konstruktor der Klasse NPC:
Java:
import java.util.HashSet;

public class NPC
{
    private Eingabeleser leser; //eingabeleser
    private Beantworter beantworter; //Beantworter
 
    /**
     * Erzeuge ein NPC.
     */
    public NPC()
    {
        leser = new Eingabeleser(); //eingabeleser
        beantworter = new Beantworter(); //neuer Beantworter
        
    }

also werden dort eigentlich keine Argumente erwartet.
 
G

gman

Gast
Ah, jetzt seh ich es. Die Variable "Test" (übrigens Variabennamen mit Kleinbuchstaben anfangen) ist nur
in der Methode "NPCerstellen" gültig. Erstelle also eine weitere Instanzvariable vom Typ "NPC" und
lösche die Zeilen 20-22 in der Klasse "Spiel":

Java:
private testNpc; //und alle "Test" in "testNpc" ändern
 

Manderda

Mitglied
??wieso Existiert die Variable Test nur in der Methode NPCerstellen ?? die Variablen aus der klasse Raumerstellen bleiben doch bestehen oder nicht?

E1:Ok ich weiß jetzt nicht ob das geklappt habe, ich habe jetzt einfach eine Instanzvariable erstellt also
[JAva]private NPC Test ;[/Java]

E2: ...zu früh gefreut.... sobald ich in einen Raum gehe, wo der NPC nicht vorhanden ist kommt die Fehler meldung "NullpointerException" bei Zeile 41 in der Klasse Spiel
E3: Ok Fehlermeldung weg. Aber trozdem kann ich aus jedem Raum mit Test reden....
 
Zuletzt bearbeitet:
G

gman

Gast
Grundsätzlich scheint es jetzt ja zu funktionieren, aber jetzt musst du dir halt anschauen wie du
den Spielverlauf in Code umsetzt. D.h. wie die Räume zusammenhängen und was für NPCs in den
Räumen drin sind. Bis jetzt hast du ja nur den NPC "Test" angelegt.
 

Manderda

Mitglied
also das mit dem NPC einem Raum zuordnen Funktioniert ja jetzt, jedoch hackelt es jetzt bei der Abfrage ob ein NPC in dem Raum ist.
Hier mal mein Lösungsansatzt:
[Java]
x = aktuellerRaum.gibnpc();
if ( x.equals(null))
{
aktuellerNPC = null;
}
else
{
aktuellerNPC = x;
}
[/code]

aktuellerRaum.gibNPC();
ist das hier:
Java:
    public NPC gibnpc ()
    {
        return npc;
    }

Es tritt beim Kompelieren kein Fehler auf aber ich kann aus Jeden Raum mit Test reden.

Edit:
Hier noch mal die Klasse von mit NPCreden , wo ja auch noch ne Abfrage sein muss
Java:
 private void mitNPCreden(Befehl befehl)
    {
      if(!befehl.hatZweitesWort()) {
            // Gibt es kein zweites Wort, wissen wir nicht, wohin...
            System.out.println("Mit wem möchten Sie reden?");
            return;
      }
      
      if ( aktuellerNPC.equals(null))
         {
            spielen();
         }
        
      aktuellerNPC.starten();
    }

E2: ich habe mal Testweise mal ein weiteren NPC erstellt und jetzt tritt was komisches auf... Wenn ich sage redenmit.testenpc2 (der 2te NPC) kommen die Antworten von dem NPC test.
 
Zuletzt bearbeitet:
G

gman

Gast
Weist du der Variablen "aktuellerRaum" denn auch mal einen Raum mit einem anderen NPC zu? Eventuell
ist es immer nur der eine Raum mit dem Test-NPC?
 

Manderda

Mitglied
Ich habe einen Neuen Raum erstellt und diesen den neuen NPC zugeordnet.
Das komische ist nur, das ich auch wenn ich sage redenmit neuentestnpc (eben der neue TestNPC) er dan trozdem die HashMap vpn alten TestNPC abfragt, das ist was ich nicht verstehe. wieso er obwohl ich sage rede mit neuentestnpc sage er einfach Handelt als ob es der NPC Test wäre.

Bin immoment nicht zuhause und kann leider nicht auf meine Daten zugreifen von daher wird es heute etwas schwer hier etwas zu machen...
 

Manderda

Mitglied
Wuhu ich habs geschaft^^ ich hab der Klasse NPC noch nen String mitgegeben, wo der Name drinne steht und dan einfach die Eingabe mit diesen String verglichen.

funktionirt jetzt alles:)
Danke an gman:) ohne dich hät ich es nicht geschafft
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M "Java Datei" Cannot be resolved to a variable Spiele- und Multimedia-Programmierung 2
H Zugreifen/Benutzen anderer Variable aus anderer Klasse Spiele- und Multimedia-Programmierung 1
D Java Variable nach String benennen Spiele- und Multimedia-Programmierung 13
C Variable Werte von zB Waffen Spiele- und Multimedia-Programmierung 11
L "Cannot find variable x" [Akanoid] Spiele- und Multimedia-Programmierung 6
C Variable Spielsteine (Astro Pop) Spiele- und Multimedia-Programmierung 19
H Mausbewegungen wie eine echte Maus in 3 dimensionalen Spielen Spiele- und Multimedia-Programmierung 12
temi OpenGL: Eine Kugel Spiele- und Multimedia-Programmierung 7
Taknax Versuche eine Mod von 1.11.2 in 1.12.2 zu porten. Spiele- und Multimedia-Programmierung 1
J noch eine Runde spielen? Spiele- und Multimedia-Programmierung 6
K Wie bekomme ich eine Transition für alle Objekte zum stoppen? Spiele- und Multimedia-Programmierung 1
P Wie kann ich einem Programm hinter eine GUI verstecken? Spiele- und Multimedia-Programmierung 12
J Wie kann man eine grafische Oberfläche erzeugen um eine Textdatei auswählen zu können ?? Spiele- und Multimedia-Programmierung 1
D Iterieren durch einen Ordner mit Audiodateien und verketten eine andere Audiodatei Spiele- und Multimedia-Programmierung 17
C Eine eigene 3d Engine : Shader - aber wie ? Spiele- und Multimedia-Programmierung 2
MABY Eine mp3 Datei in Java abspielen Spiele- und Multimedia-Programmierung 14
B Mit Swing eine Grafische Oberfläche erstellen Spiele- und Multimedia-Programmierung 1
X Minecraft Wie kann ich eine Karte erstellen wie zb:(Bei Minecraft) Spiele- und Multimedia-Programmierung 1
M Wie kann man die Auflösung eine fertigen Programms ändern? Spiele- und Multimedia-Programmierung 1
Furtano Vektoren für Bewegung für eine 2D-Simulation Spiele- und Multimedia-Programmierung 3
TheSorm Collision an einer bestimmten Seite eine Rectangles abfragen Spiele- und Multimedia-Programmierung 3
T Sinusgenerator für eine Hp Spiele- und Multimedia-Programmierung 8
S eine nullpointerexception, wo sie nicht sein sollte Spiele- und Multimedia-Programmierung 12
N Webanwendung als eine Art Spiel Spiele- und Multimedia-Programmierung 8
M Eine Art "Vier Gewinnt" Spiele- und Multimedia-Programmierung 5
B j3d Rotation um mehr als eine Achse Spiele- und Multimedia-Programmierung 9
M Methoden eine Map zu zeichnen Spiele- und Multimedia-Programmierung 5
2 Eine Java App als Midi Device? Spiele- und Multimedia-Programmierung 2
W 3D-APIs für Java - Eine Übersicht Spiele- und Multimedia-Programmierung 8
M Wavefront Object Loader zeigt nur eine Textur an. Spiele- und Multimedia-Programmierung 7
D Problem beim Öffnen einer PHP für eine Highscore Spiele- und Multimedia-Programmierung 5
R JLayer player spielt nur eine mp3 Datei ab Spiele- und Multimedia-Programmierung 1
G Was genau ist eine Grafikengine? Spiele- und Multimedia-Programmierung 14
radiac Mal eine ganz Doofe Frage... verzeiht :) Spiele- und Multimedia-Programmierung 9
Developer_X Eine Frage zur ViewBesetzung Spiele- und Multimedia-Programmierung 28
G Eine Art Polygon Spiele- und Multimedia-Programmierung 5
H Wie erzeuge ich eine Zufallszahl zwischen 0 und 8 ? Spiele- und Multimedia-Programmierung 7
B vertikal schreiben oder eine Bilddatei drehen? Spiele- und Multimedia-Programmierung 11
E nur eine Konzeptfrage Spiele- und Multimedia-Programmierung 11
G Ein begrenzter Zeitraum, um eine Eingabe zu tätigen! Spiele- und Multimedia-Programmierung 9
M mehrere PNG in eine Datei Spiele- und Multimedia-Programmierung 3
H Eine gestrichelte Linie Spiele- und Multimedia-Programmierung 3
V Wie bewege ich eine eingefügte Grafik (img) ? Spiele- und Multimedia-Programmierung 2
D Eigentlich eine Umfrage (Pausenanimation) Spiele- und Multimedia-Programmierung 4
T MouseMotionListener aus anderer Klasse verwenden. Spiele- und Multimedia-Programmierung 1
J Fertigungstechnik.. PLS HALP.. Quellcode vom Text in java-Klasse speichern Spiele- und Multimedia-Programmierung 2
C Java aus Klasse rausgehen Spiele- und Multimedia-Programmierung 2
Arif Maus-Objekt im Player Klasse implementieren !? Spiele- und Multimedia-Programmierung 2
S Eigene Klasse vec_t - 3 oder 4 Einheiten für x, y, z und w Spiele- und Multimedia-Programmierung 11
H Objekt der Klasse A in der Klasse B verwenden und manipulieren Spiele- und Multimedia-Programmierung 6
T Alle Referenzen zu einer Klasse aus Java Bytecode ersetzt, JVM sucht trotzdem diese Klasse Spiele- und Multimedia-Programmierung 1
K Klasse schließen & Kugelposition Spiele- und Multimedia-Programmierung 2
R Savegame als Datei, welche API-Klasse benutzen Spiele- und Multimedia-Programmierung 8
B String zu Objekt einer eigenen Klasse casten Spiele- und Multimedia-Programmierung 13
T Java-Klasse für Spielfeld? Spiele- und Multimedia-Programmierung 2
P Graphics Klasse Spiele- und Multimedia-Programmierung 3
G Was bewirkt die Klasse AxisAngle4d genau? Spiele- und Multimedia-Programmierung 12
G Polygon mittels der Klasse PathIterator Koordinateneckpunkte Spiele- und Multimedia-Programmierung 1
S Zur Laufzeit auf die Methode einer anderen Klasse zugreifen Spiele- und Multimedia-Programmierung 5
B Keine Graphics2D Klasse unter J# .Net??? Spiele- und Multimedia-Programmierung 6

Ähnliche Java Themen

Neue Themen


Oben