Hallo zusammen,
lange Zeit bin ich gut zurecht gekommen.
Aber jetzt hänge ich an einem Problem und komme nicht weiter.
In einer Klasse speichere ich Variablen in eine
ArrayList vom Typ
int.
Datentyp
int deshalb weil bei der nachfolgenden Verschnittoptimierung(Restverwertung mit möglichst wenig Abfallstücken) mit den Werten gerechnet wird. Diese habe ich hinbekommen, darf sie aber nicht veröffentlichen.
Mein Problem ist nun, dass ich noch keinen Algorithmus gefunden habe, der (unendlich) viele Datensätze nach der Fertigungsbreite sortiert(Index2 des Datensatzes) und die zugehörigen 7 anderen Elemente des jeweiligen Datensatzes mitnimmt.
Ich habe bereits die
OrderbyDescending-Funktion ausprobiert, einen selbst geschriebenen Algorithmus der immerhin 10 Datensätze richtig sortiert, habe die
Compare-Methode der
IComparer-Schnittstelle überschrieben und jetzt habe ich es mit der Kombination aus einer "eigenen"
Compare-Methode probiert und dem Sortieren.
Das Ergebnis ist nun, dass das 2. Element (Fertigungbreite) in den Datensätzen nicht mehr auftaucht und nur noch ab dem 3. Datensatz, aber dann unsortiert. Ich habe mich noch nicht lange genug mit dieser Lösungsvariante beschäftigt um den Fehler zu finden.
Der Quellcode hierzu:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99:
| public int Compare(int kleiner, int groesser) { int retvalue = 0;
if (kleiner < groesser) retvalue = groesser;
if (kleiner > groesser) retvalue = kleiner;
if (kleiner == groesser) retvalue = groesser;
return retvalue; }
public void DataSortBarcodeTest(System.Collections.ArrayList alistx) { int max0, max1,max3,max4, max5, max6, max7, max0minus, max1minus, max3minus, max4minus, max5minus, max6minus, max7minus; max0minus = 0; max1minus = 1; max3minus = 3; max4minus = 4; max5minus = 5; max6minus = 6; max7minus = 7; for (int i = 1;i<listBarcodes.ToString().Count()/8;i++) { max0 = 0 + (i - 1) * 8; max1 = 1 + (i - 1) * 8; max3 = 3 + (i - 1) * 8; max4 = 4 + (i - 1) * 8; max5 = 5 + (i - 1) * 8; max6 = 6 + (i - 1) * 8; max7 = 7 + (i - 1) * 8; int max = 2 + (i-1) * 8; int min = 2;
if (max >= 10) { min = 2 + (i - 2) * 8; max0minus = 0 + (i - 2) * 8; max1minus = 1 + (i - 2) * 8; max3minus = 3 + (i - 2) * 8; max4minus = 4 + (i - 2) * 8; max5minus = 5 + (i - 2) * 8; max6minus = 6 + (i - 1) * 8; max7minus = 7 + (i - 1) * 8; }
int x = Compare(Convert.ToInt32(alistx[min]), Convert.ToInt32(alistx[max])); if(x == Convert.ToInt32(alistx[max])) { int tmp = Convert.ToInt32(alistx[min]); alistx[min] = x; alistx[max] = tmp;
tmp = Convert.ToInt32(alistx[max0minus]); alistx[min] = alistx[max0]; alistx[max] = tmp; tmp = Convert.ToInt32(alistx[max1minus]); alistx[min] = alistx[max1]; alistx[max] = tmp; tmp = Convert.ToInt32(alistx[max3minus]); alistx[min] = alistx[max3]; alistx[max] = tmp; tmp = Convert.ToInt32(alistx[max4minus]); alistx[min] = alistx[max4]; alistx[max] = tmp; tmp = Convert.ToInt32(alistx[max5minus]); alistx[min] = alistx[max5]; alistx[max] = tmp; tmp = Convert.ToInt32(alistx[max6minus]); alistx[min] = alistx[max6]; alistx[max] = tmp; tmp = Convert.ToInt32(alistx[max7minus]); alistx[min] = alistx[max7]; alistx[max] = tmp; } } foreach (var xxxx in alistx) MessageBox.Show(xxxx.ToString()); } |
Kann mir bitte jemand weiterhelfen?
Ich weiß, dass die Namensgebung nicht ganz sinnvoll ist. Diese werde ich noch anpassen, wenn ich eine Lösung zu dem Problem habe.
Wenn ich es nicht hin bekomme bis nächste Woche(spätestens 15.08.) wird die Maschine ohne mein Programm ausgeliefert. 1 Tag brauche ich ja noch zum Testen der Übertragung der Daten zur Steuerung der Maschine.
Viele Grüße,
Isabelle
Moderiert von Christian S.: C#-Tags hinzugefügt
Moderiert von Th69: (Weitere) C#-Tags hinzugefügt
Moderiert von Christian S.: Topic aus WinForms verschoben am Di 06.08.2019 um 21:38