Klassenorganisation: Datentyp in Datentyp anlegen

Fishmsta

Mitglied
Hallo, Leute.

Ich habe eine Klasse Block:
Java:
public class Block {

    private Field[][] block;

    public Block() {
        this.block = new Field[3][3];
    }
}

und eine Klasse Field:
Java:
public class Field extends Observable {

    private int value = 0;
    private Set<Integer> potVal;
//........

Es werden zuerst die Fields angelegt und darin Werte gespeichert.
Dann sollen den Blocks verschiedene Fields zugewiesen werden.

Das hatte ich mir so gedacht:
Java:
public class Sudoku {

    private Field[][] fields = new Field[9][9];
    private Block[][] blocks = new Block[3][3];
    
    public void fieldsInBlocks() {
        
        for(int fieldrow = 0; fieldrow < fields.length; fieldrow++) {
            for(int fieldcolumn = 0; fieldcolumn < fields[fieldrow].length; fieldcolumn++) {
                blocks[0][0] = fields[fieldrow][fieldcolumn];
            }
        }
        
    }
//......

Der Compiler sagt mir aber, dass der Datentyp Block erwartet, aber der Datentyp Field übergeben wird (in Zeile 10).
Aber der Datentyp Blocks besteht doch aus einem Field-Array.

Was mache ich falsch?
 
blocks[0][0] ist eben ein Block`s Objekt, du musst aber auf das Field[][] block innerhalb diesen Objektes zugreifen.
(praktisch blocks[0][0].block[0][0] , was allerdings schlecht wäre und bei dir auch nicht geht da es private ist -> gut so)
Schreibe dir ein getter und/oder setter.

Am Besten du malst dir das auch mal auf 🙂
 
ah ok also quasi so:

Java:
public class Block {

    private Field[][] block;

    public Block() {
        this.block = new Field[3][3];
    }
    
    public void setBlock(int i, int j, Field field) {
        this.block[i][j] = field;
    }
}

Java:
public class Sudoku {

    private Field[][] fields = new Field[9][9];
    private Block[][] blocks = new Block[3][3];
    
    public void fieldsInBlocks() {
        
        for(int fieldrow = 0; fieldrow < fields.length; fieldrow++) {
            for(int fieldcolumn = 0; fieldcolumn < fields[fieldrow].length; fieldcolumn++) {
                blocks[0][0].setBlock(0, 0, fields[0][0]);
            }
        }
        
    }

?
 
Java:
private Field[][] fields = new Field[9][9];
    private Block[][] blocks = new Block[3][3];

Dieser teil erstellt 2 2Dimensionale Arrays. Jedes Element wird zu beginn null enthalten. Du kommst also nicht drum rum, zuerst mit 2 verschachtelten schleifen alle Elemente zu Initialisieren.
 

Zurück
Oben