Problem mit strukturiertem Array

kodela

Bekanntes Mitglied
Hallo,

ich brauche ein Array mit x strukturierten Eintragungen. Dafür habe ich eine Klasse mit der gewünschten Struktur definiert und anschließend ein Array mit 20 Elemente dieser Klasse erzeugt. Das sieht so aus:

Code:
    private class TestType
    {
        int objekt;
        int color;
        int index;
    };
    private TestType[] cTest = new TestType[20];

Was ich bekomme, ist ein Array mit 20 Integerwerten. Wo ist mein Denkfehler?

Danke für jeden Hinweis,

kodela
 
Zuletzt bearbeitet:

kodela

Bekanntes Mitglied
Ich habe die Klasse jetzt um einen Konstruktor erweitert, in dem alle drei Integerwerte auf 0 gesetzt werden. Das ändert aber auch nichts.
 

MoxxiManagarm

Top Contributor
Wie kommst du darauf, dass irgendwas falsch ist? Wie genau überprüfst du das?

Wie gesagt, du musst dein "Regal" auch befüllen. Das machst du z.B. so:

Java:
private class TestType {
  int objekt;
  int color;
  int index;

  public TestType(int objekt, int color, int index) {
    this.objekt = objekt;
    this.color = color;
    this.index = index;
  }
};

// in deiner aufrufenden Klasse
private TestType[] cTest = new TestType[20]; // leeres "Regal" mit 20 Fächern

// in einer Methode, z.B. Konstruktor der aufrufenen Klasse
for (int i = 0; i < 20; i++) {
  cTest[i] = new TestType(i, i, i); // erzeugt ein neues Objekt und legt es in das "Regalfach"
}
 
Zuletzt bearbeitet:

kodela

Bekanntes Mitglied
Ich sehe das beim Debuggen mit NetBeans an der Methode, die das Array initialisieren soll. Die sieht im Prinzip so aus:

Code:
    private void SetTests()
    {
        for (int i = 0; i < 20 i++)
        {
            cTest[i].objekt = 1;
            cTest[i].color = 5;
            cTest[i].index = 20;
        }
    }
cTest hat die vorgegebene Länge 20, aber alle Einträge sind nicht 0 wie ich erst geschrieben habe, sondern null. Deshalb habe ich die Klasse ja um den Konstruktor erweitert. Damit sieht sie insgesamt jetzt etwa so aus: (etwa, weil ich die Bezeichner geändert habe)
Code:
    public class TestType
    {
        int objekt;
        int color;
        int index;
        public TestType(int laenge) {
            for (int i = 0; i < laenge; i++) {
            this.objekt = 0;
            this.color = 0;
            this.index = 0;              
            }
        }
    };
Wenn ich im Konstruktor der Klasse einen Breakpoint setze, sehe ich, dass dieser nie angesprungen wird.
 

MoxxiManagarm

Top Contributor
Die Schleife gehört nicht in deinen Type selbst sondern in die Aufrufende Klasse / Methode. Schau dir mein Beispiel nochmal an, und die bildliche Vorstellung von einem Regal kann ich nur empfehlen. In Richtung der bildlichen Vorstellung vielleicht nochmal ein benanntes Beispiel:

Java:
class Marmeladenglas {
  private int fuellmenge;
  private String sorte;

  public Marmeladenglas(int fuellmenge, String sorte) {
    this.fuellmenge = fuellmenge;
    this.sorte = sorte;
  }
}

class MarmeladenRegalImKeller {
  private Marmeladenglas[] glaeserImRegal;

  public MarmeladenRegalImKeller {
    glaeserImRegal = new MarmeladenGlas[20]; // hier passiert nichts anderes, als zu sagen das Regal hat Platz für 20 Gläser

    glaeserImRegal[0] = new MarmeladenGlas(200, "Erdbeere"); // jetzt stellst du ein Erdbeermarmeladenglas in das erste Fach
  }
}
 

kodela

Bekanntes Mitglied
@Thallius: Entschuldige bitte, aber ich bin der Meinung, ich hätte die Frage zur Überprüfung in meiner vorstehenden Antwort (Thread 7) ausreichend beantwortet. Es sieht aber so aus, dass ich die Deine Frage missverstanden habe. Vielleicht kannst Du mir helfen, Deine Frage richtig zu verstehen.

@MoxxiManagarm: Das sieht bei mir doch auch so ähnlich aus, nur initialisiere ich das Array nicht über den Konstruktor, sondern ein einer eigenen Methode. Mein Array hat 120 Elemente mit je 3 Objekten, von denen unmittelbar bei Programmstart 48 gesetzt werden müssen.
 

mrBrown

Super-Moderator
Mitarbeiter
@MoxxiManagarm: Das sieht bei mir doch auch so ähnlich aus, nur initialisiere ich das Array nicht über den Konstruktor, sondern ein einer eigenen Methode. Mein Array hat 120 Elemente mit je 3 Objekten, von denen unmittelbar bei Programmstart 48 gesetzt werden müssen.
Bisher hast du nicht gezeigt, wie du das Array befüllst. Irgendwo solltest du ein cTest[i] = new TestType(...); stehen haben.
 
K

kneitzel

Gast
@kodela: Bitte zeige konkreten Code, den Du jetzt hast. Wenn ich Deinen Code aus #7 sehe, dann bin ich mir sicher, dass Du es nicht so hast, wie @MoxxiManagarm es gezeigt hat.

Code:
    public class TestType
    {
        int objekt;
        int color;
        int index;
        public TestType(int laenge) {
            for (int i = 0; i < laenge; i++) {
            this.objekt = 0;
            this.color = 0;
            this.index = 0;            
            }
        }
    };

Einmal diesen Code erläutert:
Du erstellt die Klasse TestType und diese bekommt drei Felder vom typ int: objekt, color und index.

Dann hast Du einen Konstruktor, der ein int nimmt. Und dann werden die int Felder der neuen Instanz laenge mal auf 0 gesetzt. Das bringt natürlich viel...

Was Du wohl haben wirst ist sowas:
private TestType[] cTest = new TestType[20]; // leeres "Regal" mit 20 Fächern
Aber wie @MoxxiManagarm bereits mit dem Regal Vergleich erläutert hat: Damit hast Du lediglich ein Array, welches 20 Referenzen auf TestType aufnehmen kann. Da wird aber noch kein einziges Element vom Typ TestType erzeugt und da wird somit auch nie ein Konstruktor aufgerufen.

Und das ist dann das, was Du im Debugger siehst: Alles null Werte.

Was Du also nun tatsächlich machen musst, ist sowas:
Code:
    private void SetTests()
    {
        for (int i = 0; i < 20 i++)
        {
            cTest[i].objekt = 1;
            cTest[i].color = 5;
            cTest[i].index = 20;
        }
    }
Nur eben ist cTest[i] ja noch null. Es fehlt auch die Erzeugung einer neuen Instanz:
Code:
    private void SetTests()
    {
        for (int i = 0; i < 20 i++)
        {
            if (cTest[i] == null) cTest[i] = new TestType(); // Hier wird bei Bedarf eine neue Instanz von TestType erzeugt.
            cTest[i].objekt = 1;
            cTest[i].color = 5;
            cTest[i].index = 20;
        }
    }

Damit das aber klappt, muss Dein Konstruktor weg, damit java wieder einen default Konstruktor erzeugt.
 

kodela

Bekanntes Mitglied
Hier ist konkreter unveränderter Code:
Code:
public class ChessBoard {

    ...
    ...
    
    public class BOARDTYPE
    {
        int piece;
        int color;
        int index;
    };   
    public BOARDTYPE[] cBoard;
    
    public ChessBoard() {   // Konstruktor
        ...
        cBoard = new BOARDTYPE[0x78];
        ...
        SetPieces();
        ...
    }
    ...
    ...

    private void SetPieces()
    {
        for (int i = 0; i < 8; i++)
        {
            cBoard[i + 0x70].piece = PIECES[i];  <- hier Breakpoint gesetzt
            cBoard[i + 0x70].color = black;
            cBoard[i + 0x60].piece = pawn;
            cBoard[i + 0x60].color = black;

            cBoard[i + 0x10].piece = pawn;
            cBoard[i + 0x10].color = white;
            cBoard[i].piece = PIECES[i];
            cBoard[i].color = white;
        }
    }
    ...
    ...
}
Im Anhang ein Screenshot wenn ich mir bei gesetztem Breakpoint den Inhalt von cBoard anzeigen lasse.

Ganz allgemein zur Information: Ich bin dabei, mein Schachprogramm bowili, welches ich vor etwa 20 Jahren (1994-2004) geschrieben habe, nach Java zu transformieren.
 

Anhänge

  • Boarddype.png
    Boarddype.png
    33 KB · Aufrufe: 6

kodela

Bekanntes Mitglied
@JustNobody:
Das mit der Initialisierung der Werte in der Klasse war nur ein Test, ob es eventuell damit geht. Aber was Du am Schluss schreibst, dass man einfach eine Instanz hinzufügen müsse, leuchtet mir ein. Ich muss das probieren, allerdings in den nächsten beiden Stunden geht es nicht.
 

MoxxiManagarm

Top Contributor
In deinem Code fehlt noch cBoard[i] = new BOARDTYPE();. Was für eine alte Sprache ist das? Ich würde davon abraten eine solche Transformierung zu machen, vorallem nicht ohne Java Vorkenntnisse. Java ist eine objektorientierte Sprache, ich bin mir relativ sicher, dass, welche Sprache du immer vorher verwendet hast, das nicht ist.
 

mrBrown

Super-Moderator
Mitarbeiter
Ohne seinen Vorschlag sieht es genauso aus ;)

du solltest natürlich nicht nur stumpf kopieren, du musst das schon etwas anpassen, in dem Fall brauchst du das mehrfach für jeden Index des Arrays.
 
K

kneitzel

Gast
Also stell Dir einmal vor, dass cBoard ein großer Apotheker-Schrank ist mit ganz vielen Schubladen.

Aber die Schubladen sind alle rausgezogen ... die kannst Du Dir aber geben lassen.

Nun gehst Du hin und sagst: Ich will jetzt die erste Schublade nutzen. Also: Neue Schublade her und in Fach 1 geschoben.
Dann gehst Du an das Fach 1 + 0x70 -> UPS, da ist ja gar keine Schublade drin!

Ja, das ist schon etwas doof, nicht wahr?
 

kodela

Bekanntes Mitglied
Danke allen,

Die for-Schleife hat gefehlt:
Code:
        cBoard = new BOARDTYPE[0x78];
        
        for (int i = 0; i < cBoard.length; i++) {
            cBoard[i] = new BOARDTYPE();
        }

@mrBrown: Ich soll nicht nur stumpf kopieren. Glaube nicht, dass ich mir dessen nicht bewusst bin.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
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
F Java Mail Problem: Authentifizierung wird nicht immer mitgeschickt Allgemeine Java-Themen 1
I Problem beim Aufrufen, von Objektmethoden/ -variablen Allgemeine Java-Themen 6
K Thread Problem Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben