Hallo Zusammen,
ich muss für eine Abgabe einen Waldbrand simulieren. Dabei ist schon einiges Vorgegeben wie z.B. das Simulationsprogramm, neighborIsOnFire, isOnFire, indexinBounds.
Ich vermute, dass ich die Lösung mehr oder weniger habe.
Nun habe ich aber das Problem, dass die neighborIsOnFire Methode ein array und zwei ints haben will, ich aber im Moment nur das array anbieten kann.
Ich sitze seit Stunden daran und ich weiß einfach nicht mehr weiter.
Über einen Impuls wäre ich sehr dankbar.
Beste Grüße
[CODE lang="java" highlight="23"]public class Forest {
// Die Wald-Repraesentation
public static int[][] TREES;
// Zustaende der Zellen
public static final int TREE = 0, FIRE_START = 1, FIRE_END = 3, END = 6;
public static void step() {
getUpdate(TREES);
public static int[][] getUpdate(int[][] x) {
int [][] y = x;
for (int i = 0; i < y.length; i++) {
for (int j = 0; j < y.length; j++) {
if(y[j] > TREE){
y[j]=y[j]+1;
}
if((y[j] = TREE) && (neighborIsOnFire(y))){
y[j]=y[j]+1;
}
if (y[j] > END){
y[j]= 0;
}
}
}
return y;
}
/**
* Ueberprueft ob ein (Moore-)Nachbar der Zelle mit Index (i,j) im Array x
* brennt.
* @param x Das Array (der Wald/ die Baeume).
* @param i Index der Zelle in der 1.Array-Dimension.
* @param j Index der Zelle in der 2. Array-Dimension.
* @return True, wenn eine der Nachbarzellen brennt, false, wenn keine der Nachbarzellen brennt.
*/
public static boolean neighborIsOnFire(int[][] x, int i, int j) {
for(int k = i-1; k <= i+1; k++) {
for(int l = j-1; l <= j+1; l++) {
if(indexInBounds(x,k,l) && isOnFire(x[k][l])) {
return true;
}
}
}
return false;
}
/**
* Ueberprueft, ob der Statuswert x einen Brand repaesentiert.
* @param x Der Wert einer Zelle (Zellstatus).
* @return True, wenn der Wert einen Brand repraesentiert, sonst false.
*/
public static boolean isOnFire(int x) {
return x >= FIRE_START && x <= FIRE_END;
}
/**
* Ueberprueft, ob der Index (i,j) im Array x liegt.
* @param x Das Array.
* @param i Index in der 1.Array-Dimension.
* @param j Index in der 2.Array-Dimension.
* @return True, wenn der Index im Array existiert, sonst false.
*/
public static boolean indexInBounds(int[][] x, int i, int j) {
return i >= 0 && j >= 0 && i < x.length && j < x.length;
}
}[/CODE]
ich muss für eine Abgabe einen Waldbrand simulieren. Dabei ist schon einiges Vorgegeben wie z.B. das Simulationsprogramm, neighborIsOnFire, isOnFire, indexinBounds.
Ich vermute, dass ich die Lösung mehr oder weniger habe.
Nun habe ich aber das Problem, dass die neighborIsOnFire Methode ein array und zwei ints haben will, ich aber im Moment nur das array anbieten kann.
Ich sitze seit Stunden daran und ich weiß einfach nicht mehr weiter.
Über einen Impuls wäre ich sehr dankbar.
Beste Grüße
[CODE lang="java" highlight="23"]public class Forest {
// Die Wald-Repraesentation
public static int[][] TREES;
// Zustaende der Zellen
public static final int TREE = 0, FIRE_START = 1, FIRE_END = 3, END = 6;
public static void step() {
getUpdate(TREES);
public static int[][] getUpdate(int[][] x) {
int [][] y = x;
for (int i = 0; i < y.length; i++) {
for (int j = 0; j < y.length; j++) {
if(y[j] > TREE){
y[j]=y[j]+1;
}
if((y[j] = TREE) && (neighborIsOnFire(y))){
y[j]=y[j]+1;
}
if (y[j] > END){
y[j]= 0;
}
}
}
return y;
}
/**
* Ueberprueft ob ein (Moore-)Nachbar der Zelle mit Index (i,j) im Array x
* brennt.
* @param x Das Array (der Wald/ die Baeume).
* @param i Index der Zelle in der 1.Array-Dimension.
* @param j Index der Zelle in der 2. Array-Dimension.
* @return True, wenn eine der Nachbarzellen brennt, false, wenn keine der Nachbarzellen brennt.
*/
public static boolean neighborIsOnFire(int[][] x, int i, int j) {
for(int k = i-1; k <= i+1; k++) {
for(int l = j-1; l <= j+1; l++) {
if(indexInBounds(x,k,l) && isOnFire(x[k][l])) {
return true;
}
}
}
return false;
}
/**
* Ueberprueft, ob der Statuswert x einen Brand repaesentiert.
* @param x Der Wert einer Zelle (Zellstatus).
* @return True, wenn der Wert einen Brand repraesentiert, sonst false.
*/
public static boolean isOnFire(int x) {
return x >= FIRE_START && x <= FIRE_END;
}
/**
* Ueberprueft, ob der Index (i,j) im Array x liegt.
* @param x Das Array.
* @param i Index in der 1.Array-Dimension.
* @param j Index in der 2.Array-Dimension.
* @return True, wenn der Index im Array existiert, sonst false.
*/
public static boolean indexInBounds(int[][] x, int i, int j) {
return i >= 0 && j >= 0 && i < x.length && j < x.length;
}
}[/CODE]