M
markus1986
Gast
hallo comm,
da ich noch anfänger bin und jetzt an ein problem gestoßen bin, was ich bisher mit keinen mitteln lösen konnte, wende ich mich an euch.
es geht um folgendes:
ich habe eine klasse Pixel:
in der comparable implementiert ist. ich weiß nicht, ob ich die methode compareTo so richtig geschrieben habe, aber sie scheint zu funktionieren.
ich lade ein foto in mein programm und klicke dann beliebige pixel in diesem bild an.
nach jedem klick werden alle nachbarpixel (für jeden wird ein objekt Pixel erstellt) mithilfe folgender methode in einer treeset gespeichert:
die treeset wird deklariert: private TreeSet<Pixel> sortierteListe; und initialisiert: sortierteListe = new TreeSet<Pixel>();
nach einem klick auf einen button wird folgende methode aufgerufen:
die erste for schleife wird wie erwartet abgearbeitet: ich erhalte also eine liste aller pixelobjekte in der treeset (alle mit versch. hashCodes). bei der zweiten for-schleife erwarte ich, dass er mir immer den ersten eintrag ausgibt, löscht und dann wieder den ersten eintrag nimmt, der natürlich der zweite aus dem vorherigen durchlauf war.
das Problem ist: er löscht den ersten eintrag nicht und ich habe keine ahnung warum!
ich habe schon sehr viel rumgetestet und mir auch ein neues beispiel geschrieben, wo ich eine treeset mit pixelobjekten (meiner pixelklasse) befüllt habe und dann genau wie hier ausgegeben habe, das klappt!
ich weiß echt nicht mehr, was ich noch testen soll .. hat jemand vielleicht eine idee?
grüße
markus
da ich noch anfänger bin und jetzt an ein problem gestoßen bin, was ich bisher mit keinen mitteln lösen konnte, wende ich mich an euch.
es geht um folgendes:
ich habe eine klasse Pixel:
Code:
public class Pixel implements Comparable<Pixel> {
private int xx, yy, regionsnummer, differenzi, farbe;
public Pixel(int xKoo, int yKoo, int rnr, int diff, int colour){
xx = xKoo;
yy = yKoo;
regionsnummer = rnr;
differenzi = diff;
farbe = colour;
}
public int getX(){
return xx;
}
public int getY(){
return yy;
}
public int getDifferenz(){
return differenzi;
}
public int getFarbe(){
return farbe;
}
public int getRegion(){
return regionsnummer;
}
public static void main(String[] args){
new Pixel(0, 0, 0, 0, 0);
}
public int compareTo(Pixel o)
{
int diffe = o.getDifferenz()-this.getDifferenz();
if (diffe != 0) {
if(diffe > 0) return -1; else return 1;
}
else if(diffe == 0){
if (this.equals(o)) return 0; else return 1;
}
else {
return 1;
}
}
}
in der comparable implementiert ist. ich weiß nicht, ob ich die methode compareTo so richtig geschrieben habe, aber sie scheint zu funktionieren.
ich lade ein foto in mein programm und klicke dann beliebige pixel in diesem bild an.
nach jedem klick werden alle nachbarpixel (für jeden wird ein objekt Pixel erstellt) mithilfe folgender methode in einer treeset gespeichert:
Code:
public void nachbarnEinsortieren(int x, int y, int a, int farbe_elter) {
int i, j;
for(i = -1; i <= 1; i++){
for(j = -1; j <= 1; j++){
if((i != 0 || j != 0) && SegImage[x+i][y+j] == -2)
{
Color pixel = bild.gibPunktfarbe(x+i, y+j);
int grau = pixel.getBlue();
int differenz = Math.abs(farbe_elter-grau);
sortierteListe.add(new Pixel(x+i, y+j, a, differenz, grau));
}
}
}
}
die treeset wird deklariert: private TreeSet<Pixel> sortierteListe; und initialisiert: sortierteListe = new TreeSet<Pixel>();
nach einem klick auf einen button wird folgende methode aufgerufen:
Code:
public void ListeAusgeben(){
for(Iterator iter = sortierteListe.iterator(); iter.hasNext(); ){
Pixel wert = (Pixel) iter.next();
System.out.println(wert);
}
int i;
for(i = 0; i < sortierteListe.size(); i++){
Pixel wert = (Pixel) sortierteListe.first();
System.out.println("----");
System.out.println(wert);
sortierteListe.remove(sortierteListe.first());
}
}
die erste for schleife wird wie erwartet abgearbeitet: ich erhalte also eine liste aller pixelobjekte in der treeset (alle mit versch. hashCodes). bei der zweiten for-schleife erwarte ich, dass er mir immer den ersten eintrag ausgibt, löscht und dann wieder den ersten eintrag nimmt, der natürlich der zweite aus dem vorherigen durchlauf war.
das Problem ist: er löscht den ersten eintrag nicht und ich habe keine ahnung warum!
ich habe schon sehr viel rumgetestet und mir auch ein neues beispiel geschrieben, wo ich eine treeset mit pixelobjekten (meiner pixelklasse) befüllt habe und dann genau wie hier ausgegeben habe, das klappt!
ich weiß echt nicht mehr, was ich noch testen soll .. hat jemand vielleicht eine idee?
grüße
markus