Hallo zusammen,
ich habe wieder ein kleines Problem. Und zwar arbeite ich gerade mit Apache POI (nur als Erklärung, warum ich mit Row, Cell etc. hantiere. Das eigentliche Problem hat, denke ich, nichts mit der API zu tun und sollte recht simpel sein.)
Zum Problem:
Ich habe eine Spalte in einer Excel-Datei in der Zahlenwerte (als Double) stehen. Diese lese ich zeilenweise ein und füge sie einer Liste hinzu. Nachdem ich alle Zeilen durchlaufen habe, sortiere ich die Liste (aufsteigend). Ich bin nun an den ersten 3 Zahlenwerte interessiert bzw. vor allem, in welchen Zeilen diese Werte stehen. Dazu durchlaufe ich die Spalte nochmals zeilenweise (ist programmiertechnisch sicherlich suboptimal und nicht gerade performant, für meine Zwecke reichts aber.)
Sind die 3 Werte voneinander verschieden (z.B. 0,1; 0,2; 0,3) funktioniert alles tadellos. Kommt nur ein Wert doppelt vor (z.B. 0,1; 0,2; 0,2) zerschießt sich das Programm völlig. Ich krieg „nur“ eine NullPointerException ausgeworfen.
Ich habe auch schon im Forum gesucht aber nichts wirklich Hilfreiches gefunden. Was ich gelesen habe ist, dass Maps o.Ä. bei ähnlichen Problemen hilfreich sind. Da meine Kenntnisse von Hashmaps etc. recht begrenzt sind, wollte ich nicht rumraten.
Habt ihr ne Idee? Es ist für die Funktionalität zwingend notwendig, dass die Duplikate drin bleiben und der Mechanismus auch mit Duplikaten funktioniert.
Vielen Dank schonmal,
Tinga
Hier noch der Code (nur auszugsweise):
ich habe wieder ein kleines Problem. Und zwar arbeite ich gerade mit Apache POI (nur als Erklärung, warum ich mit Row, Cell etc. hantiere. Das eigentliche Problem hat, denke ich, nichts mit der API zu tun und sollte recht simpel sein.)
Zum Problem:
Ich habe eine Spalte in einer Excel-Datei in der Zahlenwerte (als Double) stehen. Diese lese ich zeilenweise ein und füge sie einer Liste hinzu. Nachdem ich alle Zeilen durchlaufen habe, sortiere ich die Liste (aufsteigend). Ich bin nun an den ersten 3 Zahlenwerte interessiert bzw. vor allem, in welchen Zeilen diese Werte stehen. Dazu durchlaufe ich die Spalte nochmals zeilenweise (ist programmiertechnisch sicherlich suboptimal und nicht gerade performant, für meine Zwecke reichts aber.)
Sind die 3 Werte voneinander verschieden (z.B. 0,1; 0,2; 0,3) funktioniert alles tadellos. Kommt nur ein Wert doppelt vor (z.B. 0,1; 0,2; 0,2) zerschießt sich das Programm völlig. Ich krieg „nur“ eine NullPointerException ausgeworfen.
Ich habe auch schon im Forum gesucht aber nichts wirklich Hilfreiches gefunden. Was ich gelesen habe ist, dass Maps o.Ä. bei ähnlichen Problemen hilfreich sind. Da meine Kenntnisse von Hashmaps etc. recht begrenzt sind, wollte ich nicht rumraten.
Habt ihr ne Idee? Es ist für die Funktionalität zwingend notwendig, dass die Duplikate drin bleiben und der Mechanismus auch mit Duplikaten funktioniert.
Vielen Dank schonmal,
Tinga
Hier noch der Code (nur auszugsweise):
Java:
//Bestimmung der Datensätze mit der geringsten Abweichung
List<Double> liste = new ArrayList<Double>();
for (int m = 4; m <= sheet.getLastRowNum(); m++) {
HSSFRow datensatz = sheet.getRow(m);
HSSFCell aehnlichkeit = datensatz.getCell(14);
double a = aehnlichkeit.getNumericCellValue();
liste.add(a);
Collections.sort(liste);
}
//System.out.println(liste);
double ersterWert = liste.get(0);
//System.out.println(ersterWert);
double zweiterWert = liste.get(1);
//System.out.println(zweiterWert);
double dritterWert = liste.get(2);
//System.out.println(dritterWert);
int index1 = 0; //dient dazu, die Zeile mit dem kleinsten Zahlenwert zu finden
int index2 = 0; //dient dazu, die Zeile mit dem 2.-kleinsten Zahlenwert zu finden
int index3 = 0; //dient dazu, die Zeile mit dem 3.-kleinsten Zahlenwert zu finden
for (int n = 4; n <= sheet.getLastRowNum(); n++) {
HSSFRow datensatz = sheet.getRow(n);
HSSFCell aehnlichkeit = datensatz.getCell(14);
double a = aehnlichkeit.getNumericCellValue();
if (a == ersterWert) {
index1 = n-3;
} else {
}
if (a == zweiterWert) {
index2 = n-3;
} else {
}
if (a == dritterWert) {
index3 = n-3;
} else {
}
}
//Klassifizierende Merkmale (Index, Bauteilname, Art) aus Auswahlzeile auslesen
suchergebnisAnzeigeArea.append("Das Objekt Nr." + index1);
suchergebnisAnzeigeArea.append("Das Objekt Nr." + index2);
suchergebnisAnzeigeArea.append("Das Objekt Nr." + index3);