Hallo Leute,
bin momentan dabei den Algorithmus von Johnson in Java zu programmieren. Er soll mir später eine Auftragsreihenfolge ausgeben. Derzeit hakt es bei mir aber noch irgendwo. Daher wäre ich euch verbunden, wenn ihr mir bei der Fehlersuche helfen könntet. Wie ihr sicher anhand meines Quelltexts sehen könnt, bin ich noch ein Anfänger in der Java-Programmierung
Ich habe bisher 2 Arrays implementiert, wovon das 1.(A) bereits mit Daten aus einer Excel-Datei versorgt wird. Beim 2. (Auftrag) scheint es irgendwo Probleme zu geben, da es nicht wie beabsichtigt mit den Auftragsnummern gefüllt wird. Hierbei ist wichtig, dass ich die Position des gefundenen Minimas im 1. Array ermittle, da sie stellvertretend für die Auftragsnummer steht (daher d+1, Zeile 40 und 53).
Der Algorithmus funktioniert in Kurzform so, dass ein Minima gesucht wird und je nachdem, ob es in Spalte 1 oder einer anderen Spalte gefunden wird, unterschiedlich gehandelt wird. Befindet es sich in Spalte 1, so wird die ermittelte Auftragsnummer möglichst weit vorne im 2. Array eingereiht und im anderen Falle möglichst weit hinten.
Hier nochmal der Wiki-Link dazu: Johnson-Algorithmus ? Wikipedia
Ich hoffe, ihr versteht einigermaßen mein Problem bzw. die Aufgabe die ich mit dem Quelltext lösen will. Wie gesagt scheint der Array "Auftrag" nicht richtig mit Daten versorgt zu werden. Ich erkenne jedoch keinen Fehler
Mir ist bewusst, dass mein Quelltext nicht gerade "edel" programmiert wurde und man sich wahrscheinlich nur schwer dort hineindenken kann. Trotzdem bitte ich euch um Hilfe. Ich brauche nur die Fehlerquelle. Damit wäre mir schon geholfen.
Viele Grüße
papanurgle
bin momentan dabei den Algorithmus von Johnson in Java zu programmieren. Er soll mir später eine Auftragsreihenfolge ausgeben. Derzeit hakt es bei mir aber noch irgendwo. Daher wäre ich euch verbunden, wenn ihr mir bei der Fehlersuche helfen könntet. Wie ihr sicher anhand meines Quelltexts sehen könnt, bin ich noch ein Anfänger in der Java-Programmierung
Ich habe bisher 2 Arrays implementiert, wovon das 1.(A) bereits mit Daten aus einer Excel-Datei versorgt wird. Beim 2. (Auftrag) scheint es irgendwo Probleme zu geben, da es nicht wie beabsichtigt mit den Auftragsnummern gefüllt wird. Hierbei ist wichtig, dass ich die Position des gefundenen Minimas im 1. Array ermittle, da sie stellvertretend für die Auftragsnummer steht (daher d+1, Zeile 40 und 53).
Der Algorithmus funktioniert in Kurzform so, dass ein Minima gesucht wird und je nachdem, ob es in Spalte 1 oder einer anderen Spalte gefunden wird, unterschiedlich gehandelt wird. Befindet es sich in Spalte 1, so wird die ermittelte Auftragsnummer möglichst weit vorne im 2. Array eingereiht und im anderen Falle möglichst weit hinten.
Hier nochmal der Wiki-Link dazu: Johnson-Algorithmus ? Wikipedia
Java:
final double[][] A = new double[60][3
final int[] Auftrag = new int[60]; // liste der fahrzeugnummern in neuer reihenfolge(steuerung)
int pos = 0;
int endpos = 59;
double minValue = Double.MAX_VALUE;
for (int j = 2, i = 0; j < 61; j++, i++) { // einmal füllen
final double db = excelFileRead.getCellNumericValue("Tabelle2!D" + (j));
final double dbl = excelFileRead.getCellNumericValue("Tabelle2!E" + (j));
final double dble = excelFileRead.getCellNumericValue("Tabelle2!F" + (j));
A[i][0] = db;
A[i][1] = dbl;
A[i][2] = dble;
}
for (int fhz = 1; fhz < 60; fhz++){
for (int x = 0; x < 59; x++){ // suche nach Minimum
if (A[x][0] < minValue){
minValue = A[x][0];}
if (A[x][1] < minValue){
minValue = A[x][1];}
if (A[x][2] < minValue){
minValue = A[x][2];}
}
for (int d = 0; d < 59; d++){
if (A[d][0] == minValue){
// packe auftrag nach vorne
A[d][0] = 10000;
A[d][1] = 10000;
A[d][2] = 10000;
// damit dieser Auftrag nicht sofort wieder gefunden wird
Auftrag[pos] = d+1; // hier wird fahrzeugnummer ermittelt und in array auftrag übergeben
pos++;
}
if ((A[d][1] == minValue)||(A[d][2] == minValue)){ //packe auftrag nach hinten
if (A[d][1] == minValue){
A[d][0] = 10000;
A[d][1] = 10000;
A[d][2] = 10000;}
if (A[d][2] == minValue){
A[d][0] = 10000;
A[d][1] = 10000;
A[d][2] = 10000;}
Auftrag[endpos] = d+1;
endpos--;}
}
}
System.out.println(minValue);
for( int z = 0; z < 60; z++)
collection.add(Auftrag[z]);
Ich hoffe, ihr versteht einigermaßen mein Problem bzw. die Aufgabe die ich mit dem Quelltext lösen will. Wie gesagt scheint der Array "Auftrag" nicht richtig mit Daten versorgt zu werden. Ich erkenne jedoch keinen Fehler
Viele Grüße
papanurgle