ERLEDIGT
JA
JA
ANTWORTEN
4
4
ZUGRIFFE
2025
2025
EMPFEHLEN
-
26.09.09 18:02 #1
- Registriert seit
- Mar 2007
- Beiträge
- 65
Hallo,
ich bin auf der Suche, nach einem Algorithmus, der mir die Kombinationen von n-verschieden Arrays und n-verschiedenen Items berechnet.
Mein Tool läuft sonst grafisch basiert, ich habe hier zu Testzwecken ein konsolenbasiertes Tool geschrieben. Bei dem GUI-Tool stehen dem User verschiedenste Comboboxen, mit Möglichkeit der Mehrfachselektion, zur Verfügung.
Class Main:
Code :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
package rekursion; import java.util.ArrayList; import java.util.List; public class TestMain { /** * Test-Main * @param args */ public static void main(String[] args) { //object instancing TestMain testMain = new TestMain(); //******************************************************************* //First parameter String [] selection1 = new String[3]; selection1[0] = ("A1"); selection1[1] = ("A2"); selection1[2] = ("A3"); testMain.setRpCollection(selection1); // //Second parameter String [] selection2 = new String[2]; selection2[0] = ("B1"); selection2[1] = ("B2"); testMain.setRpCollection(selection2); //Third parameter String [] selection3 = new String[2]; selection3[0] = ("C1"); testMain.setRpCollection(selection3); //******************************************************************* Combinations.buildCombinations(0); } public void setRpCollection(String[] strArray) { List<String> arrayList = new ArrayList<String>(); for (int i = 0; i < strArray.length; i++) { if (strArray[i] != null) { arrayList.add(strArray[i]); } } Combinations.setCombinations( arrayList); } }
Class Combinations:
Code :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
package rekursion; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class Combinations { private static List<List<String>> allSelections; public static String buildCombinations( int ndx ) { if( ndx >= allSelections.size() ){ return "\n"; } Iterator<String> iterator = allSelections.get(ndx).iterator(); String result = ""; while( iterator.hasNext() ){ String part = (String) iterator.next(); result = part + " " + buildCombinations( ndx + 1); System.out.println(result); } return result; } public static void setCombinations(List<String> arrayList) { // allSelections doesn´t exist and is empty if (allSelections == null) { allSelections = new ArrayList<List<String>>(); } List<String> cacheList = new ArrayList<String>(); for (String selectionItem : arrayList) { cacheList.add("Part_" + selectionItem); } allSelections.add(cacheList); } }
Leider läuft es noch nicht so wie es soll.
Die Ergebnisliste sollte das lieferen:
Code :1 2 3 4 5 6
Part_A1 Part_B1 Part_C1 Part_A1 Part_B2 Part_C1 Part_A2 Part_B1 Part_C1 Part_A2 Part_B2 Part_C1 Part_A3 Part_B1 Part_C1 Part_A3 Part_B2 Part_C1
Geht das überhaupt?
In meinem GUI-Tool befinden sich verschiedene Comboboxen mit verschiedenen Selections.
In diesem Test-tool sollen die selections (arrays) die Comboboxen repräsentieren.
Die Komplexität besteht darain, dass die Parameter und deren Selections n-verschieden sein können.
Vielleicht ist dies auch ganz einfach zu lösen, leider hab ich darin noch keine Idee,
Kann man mir bitte jemand helfen?
Vielen Dank
MfG
smartin123
-
27.09.09 13:24 #2
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.724
- Blog-Einträge
- 29
Hallo,
hier mal eine einfache iterative Variante:
Code java: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
package de.tutorials; public class Combinations { /** * @param args */ public static void main(String[] args) { Object[][] items = { { "A1","A2","A3" }, { "B1", "B2" }, { "C1" } }; int loops = 1; for(int i = 0; i < items.length;i++){ loops *= items[i].length; } int[] indices = new int[items.length]; for(int i = 0; i < loops;i++){ for(int j = 0; j<items.length;j++){ System.out.print(items[j][indices[j]] + " "); indices[j] = (indices[j] + 1) % items[j].length; } System.out.println(); } } }
Ausgabe:
Code :1 2 3 4 5 6
A1 B1 C1 A2 B2 C1 A3 B1 C1 A1 B2 C1 A2 B1 C1 A3 B2 C1
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
27.09.09 23:24 #3
- Registriert seit
- Mar 2007
- Beiträge
- 65
Tom,
vielen Dank, genau das hab ich gesucht.
vg
smartin123
-
19.08.10 11:25 #4
- Registriert seit
- Mar 2008
- Beiträge
- 2
Interessante Vorgehensweise.
Leider werden aber nicht alle Kombinationen erstellt, wenn man z.B. das C-Array erweitert.
Wenn man z.B. das Element C2 hinzufügt, also:
ergibt die Ausgabe:Code :1 2 3 4 5 6 7 8 9 10 11 12 13
Object[][] items = { { "A1","A2","A3" }, { "B1", "B2" }, { "C1", "C2" } };
A1 B1 C1
A2 B2 C2
A3 B1 C1
A1 B2 C2
A2 B1 C1
A3 B2 C2
A1 B1 C1
A2 B2 C2
A3 B1 C1
A1 B2 C2
A2 B1 C1
A3 B2 C2
Nach der Hälfte der Einträge werden die Kombinationen also wiederholt.
Erwartet hätte ich (vermutlich jedoch in einer anderen Reihenfolge):
Ich habe es bisher noch nicht hinbekommen, den Algorithmus so zu erweitern, dass die untere Ausgabe erzeugt wird. Kann da jemand helfen ? Oder muß man dann doch ganz andere Wege gehen (z.B eine rekursive Funktion) ?Code :1 2 3 4 5 6 7 8 9 10 11 12
A1 B1 C1 A2 B2 C2 A3 B1 C1 A1 B2 C2 A2 B1 C1 A3 B2 C2 A1 B1 C2 A2 B2 C1 A3 B1 C2 A1 B2 C1 A2 B1 C2 A3 B2 C1
Gruß
J-P
-
19.08.10 11:38 #5
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.724
- Blog-Einträge
- 29
Hallo,
schau mal hier:
http://www.tutorials.de/coders-talk/...utationen.html
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
Ähnliche Themen
-
Algorithmus der rekursiven Hyperlinksuche verschnellern
Von NTDY im Forum PHPAntworten: 7Letzter Beitrag: 04.12.08, 23:09 -
Algorithmus zum Berechnen der Normalenvektor-Ausrichtung eines 3D Meshs
Von Daniel Toplak im Forum Coders TalkAntworten: 12Letzter Beitrag: 13.09.07, 03:31 -
Über URL Route berechnen
Von Ultraflip im Forum PHPAntworten: 1Letzter Beitrag: 31.08.07, 13:51 -
Algorithmus für Kombinationen
Von Roman Locher im Forum Visual Basic 6.0Antworten: 12Letzter Beitrag: 28.12.06, 09:58 -
Cosinus über Reihe berechnen
Von Der O im Forum Visual Basic 6.0Antworten: 1Letzter Beitrag: 30.04.05, 19:51





Zitieren

Login




