Hallo zusammen,
ich habe eine mehr oder weniger komplexe Frage.
Erstmal zu meiner Klasse:
Die Klasse Buschmatrix erstellt eine Matrix, bei der alle Zahlen der Matrix 3 verschiedene Stati annehmen können. 1 oder 2 oder 3.
Wenn eine Zahl eine 1 hat passiert nix, wenn eine Zahl eine 2 wird, dann sollen, die Zahlen die rechts, links, über und unter der Zahl stehen, im nächsten Schritt auch auf den Wert 2 geändert werden, sich also wie ein Buschfeuer in alle 4 Himmelsrichtungen ausbreiten.
Hier ist die Klasse:
Ausgegeben wird das ganze dann folgendermaßen:
So.
Das Problem an dieser ganzen Sache ist folgendes:
Wenn eine Zahl eine 2 wird, dann ändert sich nicht nur der Zustand der anliegenden Zahlen. Durch die Schleife werden alle folgenden Zahlen direkt konvertiert und dass soll eigentlich vermieden werden.
Wenn ich das, so wie es jetzt ist, ausführe, passiert folgendes:
Im ersten Schritt wird eine 2 eingefügt, im zweiten Schritt werden alle nachfolgenden Zahlen in der Zeile ebenfalls geändert, obwohl nach unserer Überlegung nur die 4 anliegenden geändert werden sollen.
Gibt es eine Möglichkeit, das zu begrenzen oder einzudämmen. Muss ich eventuell die ganze Klasse umschreiben?
Ich wäre für Tipps wirklich dankbar.
Vielleicht sollte ich noch hinzufügen, dass dieses "Buschfeuer" später über eine GUI präsentiert werden soll, falls jemandem der Sinn dieser Idee fehlt.
Hoffe das ist alles klar, wenn nicht, versuche ich das nochmal anders zu erklären.
Danke!!
ich habe eine mehr oder weniger komplexe Frage.
Erstmal zu meiner Klasse:
Die Klasse Buschmatrix erstellt eine Matrix, bei der alle Zahlen der Matrix 3 verschiedene Stati annehmen können. 1 oder 2 oder 3.
Wenn eine Zahl eine 1 hat passiert nix, wenn eine Zahl eine 2 wird, dann sollen, die Zahlen die rechts, links, über und unter der Zahl stehen, im nächsten Schritt auch auf den Wert 2 geändert werden, sich also wie ein Buschfeuer in alle 4 Himmelsrichtungen ausbreiten.
Hier ist die Klasse:
Java:
public class Buschmatrix implements intmatrixIF{
public int rows;
public int columns;
public int[][] a;
public Buschmatrix (int x, int y){ //Konstruktor mit zwei Übergabeparametern
rows=x; // Konstruktor ist eine spezielle Methode, die ein Objekt der Klasse erstellt(hat immer den Namen der Klasse)
columns=y;
a= new int[rows][columns];
}
@Override
public int columns() {
// TODO Auto-generated method stub
return this.columns;
}
@Override
public int get(int i, int j) {
//if (i >= 0 && j >= 0)
return a[i][j];
}
@Override
public int rows() {
return this.rows;
}
@Override
public void set(int i, int j, int value) {
a[i][j]= value;
}
@Override
public void print() {
for(int i = 0; i < rows; i++) {
for(int j = 0; j < columns; j++) {
System.out.print(a[i][j]+" ");
}
System.out.println("");
}
}
//Status 1 = Normalzustand, Status 2 = Feuer, Status 3 = Erholung, Status 0 = kein Nachbar
public void change (int i, int j){
int left;
int right;
int up;
int down;
int current;
// Statusvariablen befüllen
current = get(i, j);
if (i > 0)
up = get(i-1, j);
else up = 0;
if (i < rows-1)
down = get (i+1, j);
else down = 0;
if (j>0)
left = get (i, j-1);
else left = 0;
if (j < columns-1)
right = get (i, j+1);
else right = 0;
//normal in brennende
if (current == 1){
if (left == 2)a[i][j] = 2;
if (right == 2)a[i][j] = 2;
if (up == 2)a[i][j] = 2;
if (down == 2)a[i][j] = 2;
}
//brennende zelle in erholung
else if (current == 2)a[i][j] = 3;
//Erholung in Normal
else if (current == 3)a[i][j] = 1;
}
public void update(){
for(int i = 0; i < rows; i++) {
for(int j = 0; j < columns; j++) {
change(i,j);
}
}
}
Ausgegeben wird das ganze dann folgendermaßen:
Java:
package matrizen;
public class Brand {
/**
* @param args
*/
public static void main(String[] args) {
Buschmatrix Busch = new Buschmatrix(5, 7); // Hier wird der Konstruktor aufgerufen
for(int i = 0; i < Busch.rows; i++) {
for(int j = 0; j < Busch.columns; j++){
Busch.set(i, j, 1);
}}
Busch.set(3, 3, 2);
Busch.print();
System.out.println();
Busch.update();
Busch.print();
System.out.println();
Busch.update();
Busch.print();
System.out.println();
}
}
So.
Das Problem an dieser ganzen Sache ist folgendes:
Wenn eine Zahl eine 2 wird, dann ändert sich nicht nur der Zustand der anliegenden Zahlen. Durch die Schleife werden alle folgenden Zahlen direkt konvertiert und dass soll eigentlich vermieden werden.
Wenn ich das, so wie es jetzt ist, ausführe, passiert folgendes:
Code:
1 1 1 1 1 1 1
1 1 1 1 1 1 1
1 1 1 1 1 1 1
1 1 1 2 1 1 1
1 1 1 1 1 1 1
1 1 1 1 1 1 1
1 1 1 1 1 1 1
1 1 1 2 2 2 2
1 1 2 3 2 2 2
1 1 2 2 2 2 2
1 1 1 1 1 1 1
1 1 1 2 2 2 2
1 1 2 3 3 3 3
1 2 3 1 3 3 3
1 2 3 3 3 3 3
Im ersten Schritt wird eine 2 eingefügt, im zweiten Schritt werden alle nachfolgenden Zahlen in der Zeile ebenfalls geändert, obwohl nach unserer Überlegung nur die 4 anliegenden geändert werden sollen.
Gibt es eine Möglichkeit, das zu begrenzen oder einzudämmen. Muss ich eventuell die ganze Klasse umschreiben?
Ich wäre für Tipps wirklich dankbar.
Vielleicht sollte ich noch hinzufügen, dass dieses "Buschfeuer" später über eine GUI präsentiert werden soll, falls jemandem der Sinn dieser Idee fehlt.
Hoffe das ist alles klar, wenn nicht, versuche ich das nochmal anders zu erklären.
Danke!!