Hallo,
ich arbeite momentan an einem Programm... Dieses erzeugt einen Pixel mit x,y werten und einer Farbe. Dieser wird auf einen Stack gepushed. In der Darauffolgenden while schleife und den darin enthaltenden if-Anweisungen wird von dem Pixel aus geschaut, ob die in dem 2D-Array angrenzenden "Pixel" die Bedingung erfüllen. Ist dies der Fall, so werden p die Koordinaten den überprüften Pixels übergeben und p wird wieder auf den Stack gepushed.....Denke mal der rest erklärt sich. (Floodfill)
So weit so gut. Der Algorithmus Funktionert an sich, nur habe ich das Problem:
P wird auf dem Stack liegend "überschrieben". Deshalb läuft der Alg. nicht kompeltt durch sondern vergisst Teile.
Bsp. P ist nach der ersten if-Anweisung p(0,1,'s') und liegt auf dem Stack.
Nach der nächsten erfüllten if-Anweisung, wird p geändert auf
Bsp p(1,0,'s').
so über den Debugger habe ich festellen müssen, das beide p's auf dem Stack nun p(1,0,'s') sind. Was kann ich tun? Oder kann ich überhaupt was tun. Habe schon mit Leute gesprochen:
1. Java ist einfach scheiße.
2. Mach er einfach anders(geht nicht, da es eine gestellte Aufgabe ist).
Mehr habe ich da nicht herraus gefunden...
LG
ich arbeite momentan an einem Programm... Dieses erzeugt einen Pixel mit x,y werten und einer Farbe. Dieser wird auf einen Stack gepushed. In der Darauffolgenden while schleife und den darin enthaltenden if-Anweisungen wird von dem Pixel aus geschaut, ob die in dem 2D-Array angrenzenden "Pixel" die Bedingung erfüllen. Ist dies der Fall, so werden p die Koordinaten den überprüften Pixels übergeben und p wird wieder auf den Stack gepushed.....Denke mal der rest erklärt sich. (Floodfill)
Java:
System.out.println("Algroithmus");
int x = pX;
int y = pY;
Pixel p = new Pixel(pX, pY, neueFarbe);
koStapel.push(p);
alteFarbe = bild[pX][pY].getFarbe();
bild[pX][pY].setFarbe(neueFarbe);
while(!koStapel.isEmpty())
{
p=koStapel.top();
koStapel.pop();
x = p.getX()+1;
y = p.getY();
if(x<breite && bild[x][y].getFarbe() == alteFarbe)
{
bild[x][y].setFarbe(neueFarbe);
p.setXY(x,y);
koStapel.push(p);
}
x= x -2;
if(x>=0 && bild[x][y].getFarbe() == alteFarbe)
{
bild[x][y].setFarbe(neueFarbe);
p.setXY(x,y);
koStapel.push(p);
}
x++;
y = p.getY()+1;
if(y<hoehe && bild[x][y].getFarbe() == alteFarbe)
{
bild[x][y].setFarbe(neueFarbe);
p.setXY(x,y);
koStapel.push(p);
}
y = y-2;
if(y>=0 && bild[x][y].getFarbe() == alteFarbe)
{
bild[x][y].setFarbe(neueFarbe);
p.setXY(x,y);
koStapel.push(p);
}
}
be.bildAusgeben(bildname);
So weit so gut. Der Algorithmus Funktionert an sich, nur habe ich das Problem:
P wird auf dem Stack liegend "überschrieben". Deshalb läuft der Alg. nicht kompeltt durch sondern vergisst Teile.
Bsp. P ist nach der ersten if-Anweisung p(0,1,'s') und liegt auf dem Stack.
Nach der nächsten erfüllten if-Anweisung, wird p geändert auf
Bsp p(1,0,'s').
so über den Debugger habe ich festellen müssen, das beide p's auf dem Stack nun p(1,0,'s') sind. Was kann ich tun? Oder kann ich überhaupt was tun. Habe schon mit Leute gesprochen:
1. Java ist einfach scheiße.
2. Mach er einfach anders(geht nicht, da es eine gestellte Aufgabe ist).
Mehr habe ich da nicht herraus gefunden...
LG