Problem mit Objekten

Status
Nicht offen für weitere Antworten.
Hi,

ich habe folgendes Program geschrieben (ist noch nicht fertig). Das Problem ist, dass er bei der Funktion step die mir die Fehlermeldung: Cannot find variable spieler.

Code:
import java.lang.String;

public class BoulderDash {
static String[] scene ={"MMMMMMM",
                        "A U O M",
                        "M   O M",
                        "M   O M",
                        "MMMMOMM",
                        "M   E M",
                        "M S   M",
                        "MMMMMMM"};//Spielfeld
static char[][] feld = new char[scene.length][scene[0].length()]; 

static void umwandeln(){

//Spielfeld in ein Char Array legen                 
for (int i = 0; i < scene.length; i++) 
    for(int j=0; j <scene[i].length();j++)
        feld[i][j]=scene[i].charAt(j);
}

public void objekte(){
int u=0;        //Anzahl der Ungeheuer
int o=0;        //Anzahl der Stein
for(int i=0; i<feld.length;i++)
    for(int j=0; j<feld[i].length;j++){
        if(feld[i][j]=='U')//Ungeheuer zählen
            ++u;
        if(feld[i][j]=='O')//Steine zählen
            ++o;
    }

Stein[] stein=new Stein[o];   //Speicherplatz für die Onjekte reservieren
Ungeheuer[] ungeheuer=new Ungeheuer[u];
o=0;
u=0;
for(int i=0; i<feld.length;i++) //Arrays erzeugen und mit Inhalten füllen
    for(int j=0; j<feld[i].length;j++){
        if(feld[i][j]=='U'){//Ungeheuer Objekte erzeugen
            ungeheuer[u]=new Ungeheuer(i,j);
            u++;}
        if(feld[i][j]=='O'){//Stein Objekte erzeugen
            stein[o]=new Stein(i,j);
            o++;}
        if(feld[i][j]=='S'){//Spieler Objekt erzeugen
            Spieler spieler=new Spieler(i,j);}
    }
}

public void update(){
    for(int i=0;i<scene[i].length();i++)
    {
        for(int j=0;j<feld.length;i++){
            System.out.print(feld[i][j]);
            }
        System.out.println("");
}}

public class Stein{
    int []pos;
    public Stein(int i,int j){
    int []pos=new int[2];
        pos[0]=pos[i];
        pos[1]=pos[j];
    }}

public class Spieler{
    int []pos=new int[2];
    public Spieler(int i, int j){
        pos[0]=pos[i];
        pos[1]=pos[j];
    }}

public class Ungeheuer{
    int []pos=new int[2];
    public Ungeheuer(int i, int j){
        pos[0]=pos[i];
        pos[1]=pos[j];
    }}

public void step(int dir){
int i,j;
i=spieler.pos[0];
j=spieler.pos[1];
if(dir==0){}
if(dir==1){}
if(dir==2){}
if(dir==3){}
}

public void game(int[] dirs){
    umwandeln();    //Spielfeld umwandeln
    objekte();      //Objekte im Spielfeld suchen

    for(int i=0;i<dirs.length;i++){
        step(dirs[i]);  //Schritte der Objekte machen
        update();       //Neue Spielsituation auf der Konsole ausgeben    
        try {Thread.sleep(500);}    //Spiel langsamer machen
        catch (InterruptedException e){}
    }
}
}
 
T

tuxedo

Gast
Spieler ist auch in step() nicht bekannt. Du legst die Spieler-Objekte nur "lokal" in objekte() an statt sie als Instanzvariable oder ähnliches zu erzeugen damit sie auch in anderen Methoden verfügbar sind.

Eine IDE wir Eclipse hätte die das aber gleich angekreidet....

- Alex
 
alex0801 hat gesagt.:
Du legst die Spieler-Objekte nur "lokal" in objekte() an statt sie als Instanzvariable oder ähnliches zu erzeugen damit sie auch in anderen Methoden verfügbar sind.

Wie kann ich das denn machen, bzw wo stehen Beispiele dafür? Hab bei Javainsel und google gekuckt, aber nichts gefunden.
 

Donic

Mitglied
Leg die Deklarationen der Variablen zwischen diesen beiden Zeilen an:
public class BoulderDash {
static String[] scene ={"MMMMMMM",
 
Ich sehe da ein Problem. Die Objekte Spieler, Ungeheuer und Steine sind ja abhängig vom Spielfeld und um das zu durchsuchen brauch ich ja For-Schleifen, welche ich (so weit ich weiß) nur in Funktionen nutzen kann. Daher weiß ich nicht, wie ich die Objekte so deklarieren kann, dass sie global verfügbar sind.
 

Donic

Mitglied
Habe ich doch geschrieben.
Beachte den Unterschied zwischen DEKLARATION ("int einInt;") und INITIALISIERUNG ("einInt = 20;"). Man kann beides miteinander verbinden, aber aus dem von Dir genannten Grund geht das in Deinem Beispiel nicht.
Übrigens sehe ich keinen Grund, all diesen ganzen static-Mist zu verwenden - gewöhn Dir das gar nicht erst an. :-(
 
hab das jetzt so gemacht, das die objekte und die dazugehörige variable pos global deklariert werden, das funktioniert auch.
nur sagt der kompiler nun, das er die varibale pos in der funktion step() nicht kennt. dabei wurde sie global deklariert.
 
Hier noch mal der Code, wie gesagt, bei step() ist ihm nun die Eigenschaft pos des Objektes Spielers unbekannt.

Code:
import java.lang.String;

public class BoulderDash {
int o,u;
public Stein[] stein=new Stein[o];   //Speicherplatz für die Objekte reservieren
public Ungeheuer[] ungeheuer=new Ungeheuer[u];
public Spieler spieler;

public String[] scene ={"MMMMMMM",
                        "A U O M",
                        "M   O M",
                        "M   O M",
                        "MMMMOMM",
                        "M   E M",
                        "M S   M",
                        "MMMMMMM"};//Spielfeld
public char[][] feld = new char[scene.length][scene[0].length()]; 

public class Stein{
    public Stein(int i,int j){
        int[] pos=new int[2];        
        pos[0]=pos[i];
        pos[1]=pos[j];
    }}

public class Spieler{
    public Spieler(int i, int j){
        int[] pos=new int[2];        
        pos[0]=pos[i];
        pos[1]=pos[j];
    }}

public class Ungeheuer{
    public Ungeheuer(int i, int j){
        int[] pos=new int[2];        
        pos[0]=pos[i];
        pos[1]=pos[j];
    }}
  
public void update(){
    for(int i=0;i<scene[i].length();i++)
    {
        for(int j=0;j<feld.length;i++){
            System.out.print(feld[i][j]);
            }
        System.out.println("");
}}

public void step(int dir){
int i,j;
i=spieler.pos[0];
j=spieler.pos[1];
if(dir==0){}//oben
if(dir==1){}//links
if(dir==2){}//unten
if(dir==3){}//rechts
}

public void game(int[] dirs){
int u=0;        //Anzahl der Ungeheuer
int o=0;        //Anzahl der Stein

//Spielfeld in ein Char Array legen                 
for (int i = 0; i < scene.length; i++) 
    for(int j=0; j <scene[i].length();j++)
        feld[i][j]=scene[i].charAt(j);

//Anzahl der Steine und Ungeheuer zählen
for(int i=0; i<feld.length;i++)
    for(int j=0; j<feld[i].length;j++){
        if(feld[i][j]=='U')//Ungeheuer zählen
            ++u;
        if(feld[i][j]=='O')//Steine zählen
            ++o;
    }

for(int i=0; i<feld.length;i++) //Arrays erzeugen und mit Inhalten füllen
    for(int j=0; j<feld[i].length;j++){
        if(feld[i][j]=='U'){//Ungeheuer Objekte erzeugen
            ungeheuer[u]=new Ungeheuer(i,j);
            u++;}
        if(feld[i][j]=='O'){//Stein Objekte erzeugen
            stein[o]=new Stein(i,j);
            o++;}
        if(feld[i][j]=='S'){//Spieler Objekt erzeugen
            spieler=new Spieler(i,j);}
    }

    for(int i=0;i<dirs.length;i++){
        step(dirs[i]);  //Schritte der Objekte machen
        update();       //Neue Spielsituation auf der Konsole ausgeben    
        try {Thread.sleep(500);}    //Spiel langsamer machen
        catch (InterruptedException e){}
    }
}}
 

Donic

Mitglied
MaximusMeridius hat gesagt.:
hab das jetzt so gemacht, das die objekte und die dazugehörige variable pos global deklariert werden, das funktioniert auch.
nur sagt der kompiler nun, das er die varibale pos in der funktion step() nicht kennt. dabei wurde sie global deklariert.
Ach ja? Wo denn?
Mich beschleicht so langsam der Verdacht, dass Du überhaupt nicht verstanden hast, was Du da tust.
Wenn ich das hier sehe:
Code:
public class BoulderDash { 
int o,u; 
public Stein[] stein=new Stein[o];   //Speicherplatz für die Objekte reservieren 
public Ungeheuer[] ungeheuer=new Ungeheuer[u];
sträuben sich mir die Nackenhaare. Das o und das u geben die Größe für die Arrays an. Aber welche Werte stehen denn da drin, wenn die Klasse erstellt wird?
Du würdest übrigens den Fehler schneller finden, wenn Du nicht in den Klassen Stein, Spieler, Ungeheuer die gleichen Bezeichnungen für die Position ("pos") verwenden würdest. In diesem Zusammenhang: Speicherplatz ist nicht mehr so knapp und teuer wie vor 30 Jahren. Du darfst die Variablen zur besseren Übersicht ruhig steinPosition, spielerPosition und ungeheuerPosition in den Klassen nennen. Das kostet nichts (u.a. dank CodeCompletion) und hilft der Übersichtlichkeit - in diesem Fall auch der Fehlersuche.
Mach das mal, und dann schaue noch einmal auf die Fehlermeldung und den Code.
 
G

Gast

Gast
Pack mal all deine Klassen die du so hast in einzelne Dateien, und nicht 3 Klassen in eine rein. Dann wirst du schnell sehen das die position, genau wie dein Compiler mecker, nicht global sind.

Meinem Vorredner mich anschliessend, sofern du nicht auf nem 15-zöller arbeiten musst, wähl die Variablen-/Methodennamen sprechend. Weil jetzt weisst du zwar noch genau was die Variable pos[] macht, in 2 Monaten musst du dir das aber erst wieder mühsam aus dem Code fischen gehn.
 
T

tuxedo

Gast
Naja, kurze Variablennamen sind ja noch okay.

Wenn es ein "pos" in Spieler und ein "pos" in Stein gibt, dann ist das ja absolut nich tragisch. Immerhin gibts ja JavaDoc mit dem man die Verwendung von "pos" eindeutig beschreiben kann. Und eine gute IDE hat ja alles entsprechend verknüpft und zeigt die Doku gleich an.

Zu folgendem Problem:

>> Hier noch mal der Code, wie gesagt, bei step() ist ihm nun die Eigenschaft pos des Objektes Spielers unbekannt.

Du Held. Du hast die Variablen wieder innerhalb einer Methode deklariert. Damit sind die Variablen nur innerhalb dieser Methode sichtbar. Wenn Variablen in sämtlichen Methoden einer Klasse sichtbar sein sollen, dann musst du sie außerhalb von Methoden in dieser Klasse deklarieren.

Schlage auch vor du schmökerst mal in der "Javainsel" und liest dich ein wenig ein was das Thema Objektorientierung betrifft.

- Alex
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G problem: array aus objekten Allgemeine Java-Themen 10
T Problem mit Zuweisung von Objekten Allgemeine Java-Themen 5
krgewb Problem mit Umlauten und Eszett bei InputStream Allgemeine Java-Themen 3
Max246Sch Backtracking Problem Box Filler Allgemeine Java-Themen 6
NightVision402 VisualVM Startskript Problem Allgemeine Java-Themen 3
javaBoon86 Email Server Connection Problem Allgemeine Java-Themen 1
F Problem mit PDFBOX Library Allgemeine Java-Themen 1
A Java modul Problem Allgemeine Java-Themen 4
D Read JSON File Problem Allgemeine Java-Themen 9
urmelausdemeis Exception in thread "main" java.lang.Error: Unresolved compilation problem: Allgemeine Java-Themen 7
J Problem mit JasperReports Allgemeine Java-Themen 8
M log4j Problem mit jlink Allgemeine Java-Themen 19
8u3631984 Problem beim Mocken von Record Klassen Allgemeine Java-Themen 4
torresbig Website login Problem - Jsoup, wie bisher, klappt nicht! Allgemeine Java-Themen 31
P Selenium . getText Problem Allgemeine Java-Themen 9
A Jar zu Exe Problem Allgemeine Java-Themen 13
sserio Variablen Liste erstellt und ein Problem mit dem Index Allgemeine Java-Themen 6
S Folgendes Problem bei einem Programm Allgemeine Java-Themen 1
stormyark Problem beim Klassen erstellen Allgemeine Java-Themen 1
A Thread.sleep Problem Allgemeine Java-Themen 2
A Problem bei der Nachbarschafttest Allgemeine Java-Themen 11
Splayfer Problem: no main manifest attribute Allgemeine Java-Themen 3
G javamail Problem beim Empfangen von Nachrichten Allgemeine Java-Themen 3
Splayfer JDA Problem mit MessageCounter Allgemeine Java-Themen 0
Splayfer Problem mit BufferedWriter Allgemeine Java-Themen 3
F Streams als Alternative für dieses Problem ? Allgemeine Java-Themen 15
N Maven Problem mit Datenbanktreiber (H2 Embedded) Allgemeine Java-Themen 12
T Problem beim Umwandeln in eine Jar-Datei Allgemeine Java-Themen 3
B Einfach Elemente zweier Arraylisten kreuz und quer vergleichen, min und max Problem? Allgemeine Java-Themen 16
C ArrayList Problem Allgemeine Java-Themen 3
kev34 nim-Spiel problem Allgemeine Java-Themen 1
D Firebase retrieve data Problem, Child Element wird nicht angesprochen Allgemeine Java-Themen 0
G Welches Problem besteht bei den Typparametern? Allgemeine Java-Themen 5
temi Problem mit Aufrufreihenfolge bei Vererbung Allgemeine Java-Themen 3
Sumo_ow "ArrayIndexOutofBoundsException: 2" Array Problem Allgemeine Java-Themen 6
T PIM basierend auf netbeans via AnyDesk Problem Allgemeine Java-Themen 3
xGh0st2014 Problem mit Java Array Allgemeine Java-Themen 1
Kirby.exe Verständnis Problem bei Rucksack Problem Allgemeine Java-Themen 6
B Eclipse-Lombok-Problem Allgemeine Java-Themen 19
I Input/Output ObjectOutputStream - Problem Allgemeine Java-Themen 7
1 Multiple Choice Knapsack- Problem Allgemeine Java-Themen 2
kodela Problem mit strukturiertem Array Allgemeine Java-Themen 18
E Problem mit Gridlayout und Button Allgemeine Java-Themen 2
A Array Problem Allgemeine Java-Themen 8
bueseb84 Problem Allgemeine Java-Themen 0
S Problem mit Arrays Allgemeine Java-Themen 1
D Nullpointer Exception Problem Allgemeine Java-Themen 5
B Problem mit meinen Klassen Allgemeine Java-Themen 6
A HashMap Methode "get()"-Problem Allgemeine Java-Themen 28
J Problem beim Umstellen auf Java jdk 13 Allgemeine Java-Themen 3
J Problem bei Install java 13 Allgemeine Java-Themen 3
X Profitable Reise Problem Allgemeine Java-Themen 32
A Problem beim öffnen von Java-Installern Allgemeine Java-Themen 1
Dann07 Problem mit JavaMail API Allgemeine Java-Themen 26
J Problem beim Generischen Klassen und Interfaces Allgemeine Java-Themen 2
L Klassen Algorithmus für das folgende Problem entwickeln? Allgemeine Java-Themen 30
J Clear-Problem Allgemeine Java-Themen 10
B Problem zu einem Java Projekt Allgemeine Java-Themen 6
S JFileChooser Problem Allgemeine Java-Themen 4
M Traveling Salesman - MST Heuristik Problem Allgemeine Java-Themen 4
J Traveling Salesman Problem Allgemeine Java-Themen 14
E Java Editor Problem mit 2er Exceptions Allgemeine Java-Themen 12
C code oder Bibliotheken für 2-Center Problem Allgemeine Java-Themen 4
M Salesman Problem - Bruteforce Algorithmus Allgemeine Java-Themen 23
S Methoden Problem mit NullPointerException Allgemeine Java-Themen 9
Javafan02 Problem mit if-clause Allgemeine Java-Themen 17
J Lombok Problem mit Konstruktoren bei Verberbung Allgemeine Java-Themen 1
kodela Event Handling Problem mit der Alt-Taste Allgemeine Java-Themen 16
W Threads Problem Allgemeine Java-Themen 15
D (Verständnis-)Problem mit Unterklasse Allgemeine Java-Themen 4
S Problem mit Generic bei unmodifiableCollection Allgemeine Java-Themen 4
S jserialcomm Problem Allgemeine Java-Themen 1
Flynn Thread-Problem... Allgemeine Java-Themen 2
J Generische Interface - Problem Allgemeine Java-Themen 3
G Problem beim GUI Allgemeine Java-Themen 9
L Applet Problem "security: Trusted libraries list file not found" ? Allgemeine Java-Themen 7
A OOP Problem beim Berechnen der größten Fläche eines Ringes Allgemeine Java-Themen 19
T Problem mit externen Datenbankzugriff über SSH Tunnel Allgemeine Java-Themen 4
F Problem beim Einlesen einer Textdatei Allgemeine Java-Themen 12
S Java OpenOffice Problem mit Windows-Benutzerwechsel Allgemeine Java-Themen 19
K Threads RAM Problem Allgemeine Java-Themen 20
P Operatoren Problem mit Zähler in recursiver Schleife Allgemeine Java-Themen 2
C Int Problem Allgemeine Java-Themen 8
C J2V8 NodeJs Java Bride Problem und Frage!?!? Allgemeine Java-Themen 1
J Problem bei Hashmap Key-Abfrage Allgemeine Java-Themen 4
C Webseiten Programm problem Allgemeine Java-Themen 5
M LocalDate Problem Allgemeine Java-Themen 4
J "Problem Objektorientierung" Allgemeine Java-Themen 20
geekex Problem Meldung! Was tun?! Allgemeine Java-Themen 19
T Klassen Override Problem Allgemeine Java-Themen 7
L Unbekanntes Problem Allgemeine Java-Themen 1
FrittenFritze Problem mit einer JComboBox, Event temporär deaktivieren Allgemeine Java-Themen 11
Blender3D Java Swing Programm Windows 10 Autostart Problem Allgemeine Java-Themen 2
F HTTPS Zertifikat Problem Allgemeine Java-Themen 3
M OpenCV KNearest Problem Allgemeine Java-Themen 0
Tommy Nightmare Project Euler: Problem 22 Allgemeine Java-Themen 2
C Abstrakte Klasse, lokale Variable-Problem Allgemeine Java-Themen 1
N Vererbung Design-Problem mit vorhandenen, von der Klasse unabhängigen Methoden Allgemeine Java-Themen 12
P Eclipse Projekt anlegen macht Problem Allgemeine Java-Themen 1
RalleYTN META-INF/services Problem Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben