Vererbung von Arrays

hitman52

Mitglied
Hallo Forum,

ich bin grad dabei ein TicTacToe zu programmieren und hab ein Problem.
Bei dem Spiel wird auf eine GUI verzichtet und für ein und Ausgaben die Konsole verwendet.
Zunächst zur Struktur:

Klassen:
-IO (für ein und Ausgaben, System.in's und out's)
-data (hier ist das Spielfeld als 2D Array gespeichert)
-KI (ein computergegner der momentan einfach einen zufälligen zug macht)
-Main

Soweit funktioniert alles, die Klasse KI erbt von data, damit die KI Zugriff auf das Spielfeld array hat.
Wenn ich jedoch in der Klasse Ki das geerbte Array ausgebe ist dieses komplett leer (komplett mit Nullen gefüllt), obwohl es innerhalb der data Klasse andere Werte enthält.

Bitte um Hilfe!
 

Schandro

Top Contributor
so funktioniert vererbung nicht... wenn du eine instanz von data (PS: das d sollte großgeschrieben werden) und eine instanz von KI erstellst, liegen 2 Arrays im Arbeitsspeicher. Wenn du das von Data änderst hat das keine Auswirkung auf das Array von KI.

Grundsätzlich ist deine Struktur falsch. KI sollte auf keinen Fall von Data erben! Stattdesssen braucht die KI irgendwie Zugriff auf Data, am besten in dem du eine Referenz auf Data beim Aufruf der Methode übergibst, die den Zug des Computerspielers ausführen soll.
 

hitman52

Mitglied
ok hab jetzt mal ein Objekt in KI angelegt unf versuche jetzt so Zugriff auf das Array in Data zu erhalten. Leider wieder ohne Erfolg, Die print() in data und die print() in KI die mit dem Objekt auf das protected Array zugreift liefern unterschiedliche Erghebnisse:
Java:
0 |0 |0 
--------
0 |0 |0 
--------
0 |0 |0 


1 |1 |2 
--------
1 |0 |0 
--------
0 |2 |0

Ideen was ich falsch mache?
 

hitman52

Mitglied
hier der code:

die KI Klasse:

Java:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Tic;

import java.awt.Point;
import java.util.Random;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author gulde
 */
public class KI extends data {

    //data d = new data();


    public KI(){

    }

    public Point getPosRandom() {

        Random rnd = new Random();
        Point p = new Point(rnd.nextInt(3), rnd.nextInt(3));

        while (true) {
            if ( feld[p.x][p.y] == 0) {
                break;

            } else {
                p = new Point(rnd.nextInt(3), rnd.nextInt(3));
            }
        }


        //

        for (int i = 0; i < 4; i++) {
            System.out.println("");
        }

        for (int y = 0; y < feldLength().y; y++) {
            for (int x = 0; x < feldLength().x; x++) {
                System.out.print(feld[p.x][p.y] + " ");

                if (x == 0 || x == 1) {
                    System.out.print("|");
                }
            }
            System.out.println("");
            if (y == 0 || y == 1) {
                System.out.print("--------");
                System.out.println("");
            }
        }

        for (int i = 0; i < 3; i++) {
            System.out.println("");
        }

        try {
            Thread.sleep(300); //sleep for 1000 ms
        } catch (InterruptedException ex) {
            Logger.getLogger(IO.class.getName()).log(Level.SEVERE, null, ex);
        }


        //




        return p;
    }
}

die data Klasse:

Java:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Tic;

import java.awt.Point;

/**
 *
 * @author gulde
 */
public class data {

    public int[][] feld = new int[3][3];

    public data(){
       
    }

    public int getElement(int x,int y) {
        return feld[x][y];
    }

    public boolean setElement(int x, int y, int Element) {

        feld[x][y] = Element;
        return false;
    }
    public Point feldLength(){
        return new Point(feld.length,feld[0].length);
    }
}

die Klasse IO:

Java:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Tic;

import java.awt.Point;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author gulde
 */
public class IO {

    private boolean run = true;
    data d = new data();
    KI ki = new KI();

    public void print() {

        for (int i = 0; i < 4; i++) {
            System.out.println("");
        }

        for (int y = 0; y < d.feldLength().y; y++) {
            for (int x = 0; x < d.feldLength().x; x++) {
                System.out.print(d.getElement(x, y) + " ");

                if (x == 0 || x == 1) {
                    System.out.print("|");
                }
            }
            System.out.println("");
            if (y == 0 || y == 1) {
                System.out.print("--------");
                System.out.println("");
            }
        }

        for (int i = 0; i < 3; i++) {
            System.out.println("");
        }

        try {
            Thread.sleep(300); //sleep for 1000 ms
        } catch (InterruptedException ex) {
            Logger.getLogger(IO.class.getName()).log(Level.SEVERE, null, ex);
        }


    }

    public void gameLoop() {

        while (run) {
            /*
            1. einlesen
            2.KI zug
            3.Gewinnabfrage
            4. print
             */


            print();


            Point p1 = readPos();

            while (true) {

                if (p1 != null) {
                    break;
                } else {
                    p1 = readPos();
                }

            }

            d.setElement(p1.x - 1, p1.y - 1, 1);

            if (gewinnAbfrage(1)) {
                System.out.println("Du hast gewonnen! Herzlichen Glückwunsch");
                break;
            }

            Point p2 = ki.getPosRandom();
            d.setElement(p2.x, p2.y, 2);

            if (gewinnAbfrage(2)) {
                System.out.println("You lost! FAIL");
                break;
            }



        }

    }

    public Point readPos() {

        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

        try {
            System.out.println("Bitte Koordinaten eingeben (x,y)");
            String input = in.readLine();
            String[] lol = new String[2];
            lol = input.split(",");

            Point p = new Point(Integer.parseInt(lol[0]), Integer.parseInt(lol[1]));


            if ((p.x == 1 || p.x == 2 || p.x == 3) && (p.y == 1 || p.y == 2 || p.y == 3)) {
                return p;
            } else {
                System.err.println("Deine Werte sind inkompatibel, mois");
            }



        } catch (IOException ex) {
            Logger.getLogger(IO.class.getName()).log(Level.SEVERE, null, ex);
            System.err.println(
                    "Konnte Position nicht einlesen!");
        }
        return null;
    }

    public boolean gewinnAbfrage(int Element) {

        if (remis() || winCol(Element) || winRow(Element) || winDiag_lr(Element) || winDiag_rl(Element)) {
            run = false;
            return true;
        }

        return false;
    }

    public boolean remis() {

        int counter = 0;

        for (int y = 0; y < d.feldLength().y; y++) {
            for (int x = 0; x < d.feldLength().x; x++) {
                if (d.getElement(x, y) != 0) {
                    counter++;
                }
            }
        }
        if (counter == 9) {
            System.out.println("unentschieden!");
            run = false;
            return true;
        }


        return false;
    }

    private boolean winCol(int Element) {
        return false;
    }

    private boolean winRow(int Element) {
        return false;
    }

    private boolean winDiag_lr(int Element) {
        return false;
    }

    private boolean winDiag_rl(int Element) {
        return false;
    }
}

Danke im voraus!
 

Michael...

Top Contributor
Wie bereits erwähnt, KI von data erben lassen ist Unsinn.
KI braucht einfach nur eine Referenz auf ein data Objekt
Java:
public class KI extends data {
    private data d;
 
    public KI(data d){
            this.d = d;
    }
...
Und wie ebenfalls bereits erwähnt, sollte man Klassenbezeichner mit Grossbuchstaben anfangen lassen.
 

hitman52

Mitglied
Doch die Klasse IO mit der Methode GameLoop().
Hab jetzt in der IO Klasse noch folgendes geändert:

Java:
data d = new data();
KI ki = new KI(d);

Leider immer noch ohne Erfolg :(
 

Schandro

Top Contributor
poste mal deinen gesamten code ODER guck ob du immernoch KI von data erben lässt oder irgendeinen sonstigen Fehler drin hast
 

Michael...

Top Contributor
Das extends data bei der Klasse KI muss natürlich weg und statt der nicht mehr gültigen Zugriffe auf feld muss du dann die Methoden aus data verwenden.
 

hitman52

Mitglied
Habs mittlerweile hinbekommen.
Die Ki erbt weiterhin von data und die Klasse IO hat ein Objekt der KI.
So funktioniert alles bestens.

Danke für eure Hilfe
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Vererbung von geschachtelten Arrays - Kundenkonto Java Basics - Anfänger-Themen 5
K Vererbung von Arrays Java Basics - Anfänger-Themen 4
E Vererbung und Arrays, ich werd verrückt! Java Basics - Anfänger-Themen 7
imocode Vererbung Problem mit Vererbung Java Basics - Anfänger-Themen 2
M Vererbung - Polymorphie Java Basics - Anfänger-Themen 37
L Java- Vererbung Java Basics - Anfänger-Themen 4
ineedhelpinjava Vererbung Java Basics - Anfänger-Themen 12
ineedhelpinjava Vererbung Java Basics - Anfänger-Themen 1
I JSON / XML Struktur mit Vererbung / Interfaces Java Basics - Anfänger-Themen 0
M Interface oder Vererbung? Java Basics - Anfänger-Themen 12
M Vererbung Java Basics - Anfänger-Themen 6
M Designentscheidung von Attributen/Methoden im Falle von Vererbung Java Basics - Anfänger-Themen 8
M Generics Vererbung Listen Java Basics - Anfänger-Themen 2
A Methoden Vererbung und Interface Java Basics - Anfänger-Themen 14
D Klassen und Vererbung Java Basics - Anfänger-Themen 2
U Vererbung Java Basics - Anfänger-Themen 7
D Vererbung Java Basics - Anfänger-Themen 3
K Schleife berechnet kein Ergebnis (Vererbung) Java Basics - Anfänger-Themen 6
00111010101 Objektorientiertes Programmieren mit Vererbung (Zahlen in Array verschwinden) Java Basics - Anfänger-Themen 3
W Zur Vererbung: Wann und wie? Java Basics - Anfänger-Themen 35
H Datenkapselung, Vererbung und UML Java Basics - Anfänger-Themen 16
districon Super-Stichwort/ Vererbung Java Basics - Anfänger-Themen 3
YaU Vererbung erstellt NullPointerException? Java Basics - Anfänger-Themen 4
G Vererbung Klassenattribute Java Basics - Anfänger-Themen 9
TimoN11 Frage zu Java-Vererbung (Cast) Java Basics - Anfänger-Themen 5
N Thema Vererbung Java Basics - Anfänger-Themen 31
A Vererbung Vererbung Übung Java Basics - Anfänger-Themen 5
B Vererbung - Sichtbarkeitsmodifikation - protected Java Basics - Anfänger-Themen 10
B Best Practice Unschlüssig ob Vererbung oder Interface Java Basics - Anfänger-Themen 2
G Java Vererbung Java Basics - Anfänger-Themen 8
Y Vererbung Konto - Anfangsprobleme Java Basics - Anfänger-Themen 7
A Vererbung Klassen im Bezug auf Auto´s Java Basics - Anfänger-Themen 18
A Klassen Vererbung und zusätzliche Unterklassen Java Basics - Anfänger-Themen 23
M Vererbung mit Enums Java Basics - Anfänger-Themen 8
Kirby.exe Vererbung im Detail erklärt? Java Basics - Anfänger-Themen 9
N Modellierung, vererbung, Java Basics - Anfänger-Themen 163
M Fehlendes Verständnis für dynamische Bindung und Vererbung Java Basics - Anfänger-Themen 13
W OOP Vererbung im Computerspiel Java Basics - Anfänger-Themen 7
J Probleme mit Vererbung Java Basics - Anfänger-Themen 4
I Vererbung Java Basics - Anfänger-Themen 13
W OOP Vererbung und Problem bei Zählschleife in einer Methode Java Basics - Anfänger-Themen 10
W Methoden Verständnisfrage Vererbung von Methoden Java Basics - Anfänger-Themen 14
V Vererbung Java Basics - Anfänger-Themen 2
J Frage zur Vererbung Java Basics - Anfänger-Themen 1
J Vererbung Java Basics - Anfänger-Themen 3
U Was löst meine NullPointerException aus? (Vererbung) Java Basics - Anfänger-Themen 12
O Vererbung Ueben mit kleiner Datenstruktur von Räumen Java Basics - Anfänger-Themen 10
O Umgang mit Vererbung verstehen Java Basics - Anfänger-Themen 4
A Vererbung/Interfaces/Generics Java Basics - Anfänger-Themen 12
O Vererbung änderung des Konstruktors Java Basics - Anfänger-Themen 8
L Vererbung Java Basics - Anfänger-Themen 5
E HashMap+Vererbung Java Basics - Anfänger-Themen 11
E Vererbung super-Methoden Aufruf Java Basics - Anfänger-Themen 3
B Java Vererbung Fragen (zu Code Beispiel) Java Basics - Anfänger-Themen 3
A Objekterstellung bei der Vererbung Java Basics - Anfänger-Themen 7
P Vererbung Warum funktioniert die Vererbung hier nicht Java Basics - Anfänger-Themen 14
S Vererbung Java mehrfach Java Basics - Anfänger-Themen 10
B Objekte zählen/ Vererbung/ Kopplung/ Interface/ Abstract Class Java Basics - Anfänger-Themen 5
A Klassen Vererbung privater Methoden und Member Java Basics - Anfänger-Themen 12
A Konstruktoren Vererbung Java Basics - Anfänger-Themen 3
ReinerCoder Vererbung von JFrame in einer Klasse entfernen Java Basics - Anfänger-Themen 5
W Vererbung, abstract und Konstruktoren Java Basics - Anfänger-Themen 30
J Vererbung und Methodenaufruf Java Basics - Anfänger-Themen 11
G Polymorphie, Vererbung, statischer Typ, Laufzeittyp Java Basics - Anfänger-Themen 2
H Vererbung mit private instanzvariablen Java Basics - Anfänger-Themen 9
S Vererbung Funktionsweise Code zur Vererbung Java Basics - Anfänger-Themen 1
C Methoden Vererbung private Attribute/public Methoden Java Basics - Anfänger-Themen 4
S Verständnis Vererbung Java Basics - Anfänger-Themen 3
D JavaFX Vererbung Java Basics - Anfänger-Themen 2
U Vererbung Generizität und Vererbung Java Basics - Anfänger-Themen 4
A Vererbung bei Klassen mit Objekt der Klasse im Konstruktor Java Basics - Anfänger-Themen 4
K Vererbung Octagon von Circle Java Basics - Anfänger-Themen 0
B Hilfe bei Vererbung Java Basics - Anfänger-Themen 2
D Vererbung Frage zum Klassenaufbau mit Vererbung Java Basics - Anfänger-Themen 1
T Vererbung und interface. Java Basics - Anfänger-Themen 1
S Gehaltsberechnung (Vererbung, abstrakte Methoden) Java Basics - Anfänger-Themen 6
S Vererbung Java Basics - Anfänger-Themen 1
F Vererbung in zwei Richtungen? Java Basics - Anfänger-Themen 14
D Vererbung / Polymorphie Java Basics - Anfänger-Themen 5
O Vererbung Java Basics - Anfänger-Themen 5
MiMa Vererbung Theorie OK, Praxis ?? Java Basics - Anfänger-Themen 4
Arif Vererbung Vererbung Variablen überschreiben Java Basics - Anfänger-Themen 1
C Vererbung - Ausgaben bestimmen Java Basics - Anfänger-Themen 6
S Vererbung Java Basics - Anfänger-Themen 10
L Setter und Getter/Vererbung Java Basics - Anfänger-Themen 6
C Konstruktoren und Vererbung Java Basics - Anfänger-Themen 2
J Kleinere Frage zur Vererbung/Objekterzeugung Java Basics - Anfänger-Themen 2
G Vererbung Java Basics - Anfänger-Themen 12
J Vererbung privater Variablen Java Basics - Anfänger-Themen 7
J Vererbung Vererbung von Methoden Java Basics - Anfänger-Themen 6
B Vererbung Java Basics - Anfänger-Themen 12
K Vererbung (super) Java Basics - Anfänger-Themen 2
A ArrayQueue mit Exceptions und Vererbung Java Basics - Anfänger-Themen 3
J Java: static bei Vererbung Java Basics - Anfänger-Themen 5
C Vererbung Java Basics - Anfänger-Themen 4
L Vererbung Java Basics - Anfänger-Themen 3
J Klassenorganisation | Vererbung Java Basics - Anfänger-Themen 1
B Vererbung Vererbung Java Basics - Anfänger-Themen 2
N Generics Vererbung Wildcard Interface Java Basics - Anfänger-Themen 8
A Benötige Hilfe bei Vererbung Java Basics - Anfänger-Themen 1

Ähnliche Java Themen


Oben