Ich hab euch mein Problem in kleinem Maßstab nachgebaut. Solange es keine Duplikate gibt funktioniert alles. Sieht meine Tabelle zum Beispiel so aus:
A 3
B 4
C 5
D 2
E 1
F 6
Dann erhalte ich folgende Ausgabe:
Das Objekt Nr.e weißt die größte
Übereinstimmung mit Ihrer Suchanfrage auf. (Abweichung:1.0)
Das Objekt Nr.d weißt die zweitgrößte
Übereinstimmung mit Ihrer Suchanfrage auf. (Abweichung:2.0)
Das Objekt Nr.a weißt die drittgrößte
Übereinstimmung mit Ihrer Suchanfrage auf. (Abweichung:3.0)
Kommt nun ein Zahlenwert doppelt vor, z.B. so:
A 1
B 4
C 5
D 1
E 1
F 6
Dann erhalte ich diese Ausgabe:
Das Objekt Nr.e weißt die größte
Übereinstimmung mit Ihrer Suchanfrage auf. (Abweichung:1.0)
Das Objekt Nr.e weißt die zweitgrößte
Übereinstimmung mit Ihrer Suchanfrage auf. (Abweichung:1.0)
Das Objekt Nr.e weißt die drittgrößte
Übereinstimmung mit Ihrer Suchanfrage auf. (Abweichung:1.0)
Ich will aber:
Das Objekt Nr.a weißt die größte
Übereinstimmung mit Ihrer Suchanfrage auf. (Abweichung:1.0)
Das Objekt Nr.d weißt die zweitgrößte
Übereinstimmung mit Ihrer Suchanfrage auf. (Abweichung:1.0)
Das Objekt Nr.e weißt die drittgrößte
Übereinstimmung mit Ihrer Suchanfrage auf. (Abweichung:1.0)
Java gibt mir also 3 mal die letzte Zeile mit dem niedrigsten Wert (e) aus. Ich möchte aber, dass er mir alle 3 Datensätze ausgibt – idealerweise von oben nach unten (in dem hier dargestellten Fall also a-d-e). Wenn 3 identische Werte vorkommen soll der Output dann nicht mehr „größte, zweitgrößte, drittgrößte“ sein sondern nur noch „größte“. (Das werde ich hoffentlich selbst hinbekommen.) Für den Rest bräuchte ich aber eine Idee.
Heute Mittag habe ich einen Bock geschossen. Das ist nun ein „echtes Programmier-Problem“. Meine bisherigen Ansätze haben sich darauf konzentriert, vor der for-Schleife eine if-Anweisung zu setzen, in der ich die Unterscheidung treffe:
if (ersterWert == zweiterWert && ersterWert == dritterWert) {
}
if (ersterWert == zweiterWert) {
}
if (zweiterWert == dritterWert) {
}
Ich hab aber noch keine Anweisung in den geschweiften Klammern, weil mir der Ansatz fehlt.
Der ganze Code der funktioniert ist hier:
[code=Java]
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
public class Test {
public static void main (String[] args) {
try
{
FileInputStream myInput = new FileInputStream("C:/Users/max/Desktop/Max/Studium/Master/00_Hiwi/20140307_Eclipse/20140919_Demonstration/Excel.xls");
POIFSFileSystem fileSystem = new POIFSFileSystem(myInput);
HSSFWorkbook workbook = new HSSFWorkbook(fileSystem);
HSSFSheet sheet = workbook.getSheetAt(0);
//Bestimmung der Datensätze mit der geringsten Abweichung
List<Double> liste = new ArrayList<Double>();
for (int m = 0; m <= sheet.getLastRowNum(); m++) {
HSSFRow datensatz = sheet.getRow(m);
HSSFCell aehnlichkeit = datensatz.getCell(1);
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 = 0; n <= sheet.getLastRowNum(); n++) {
HSSFRow datensatz = sheet.getRow(n);
HSSFCell aehnlichkeit = datensatz.getCell(1);
double a = aehnlichkeit.getNumericCellValue();
if (a == ersterWert) {
index1 = n;
//System.out.println(sheet.getRow(index1+3).getCell(1).getStringCellValue());
} else {
}
if (a == zweiterWert) {
index2 = n;
//System.out.println(sheet.getRow(index2+3).getCell(1).getStringCellValue());
} else {
}
if (a == dritterWert) {
index3 = n;
//System.out.println(sheet.getRow(index3+3).getCell(1).getStringCellValue());
} else {
}
}
String name1 = sheet.getRow(index1).getCell(0).getStringCellValue();
String name2 = sheet.getRow(index2).getCell(0).getStringCellValue();
String name3 = sheet.getRow(index3).getCell(0).getStringCellValue();
System.out.println("Das Objekt Nr." + name1 + " weißt die größte \nÜbereinstimmung mit Ihrer Suchanfrage auf. (Abweichung:" + ersterWert + ")\n");
System.out.println("Das Objekt Nr." + name2 + " weißt die zweitgrößte \nÜbereinstimmung mit Ihrer Suchanfrage auf. (Abweichung:" + zweiterWert + ")\n");
System.out.println("Das Objekt Nr." + name3 + " weißt die drittgrößte \nÜbereinstimmung mit Ihrer Suchanfrage auf. (Abweichung:" + dritterWert + ")\n");
FileOutputStream myOutput = new FileOutputStream(new File("C:/Users/max/Desktop/Max/Studium/Master/00_Hiwi/20140307_Eclipse/20140919_Demonstration/Excel.xls"));
workbook.write(myOutput);
myOutput.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
[/code]