Alle Kombinationen von Strings (Paarweise)
-
Hi,
ich habe eine LinkedList mit verschiedenen String und möchte gerne, alle Kombinationen von Paaren, wobei jedes Paar nur einmal vorkommen darf:
Sagen wir ich habe:
LinkedList test = new LinkedList();
test.add("eis");
test.add("feuer");
test.add("wasser");Dann möchte ich danach sowas hier:
eis:feuer
eis:wasser
feuer:wasserJeder Eintrag ist mit jedem einmalig verknüpft. Habe es versucht in einer Schleife zu lösen, weiß aber nicht wie ich es machen soll.
Hat da jemand eine Idee?
Jennes
-
Ich habe eine Lösung für dich, allerdings müsstest du dich dann mit einer ArrayList zufrieden geben. Wenn nicht, dann setze ich mich morgen noch einmal für dich daran und probiere eine andere Lösung zu finden...
linkAll.java:import java.util.*; public class LinkAll { private ArrayList linkAll = new ArrayList(); private int counter = 0; private String linkAllOutput = ""; public LinkAll() { } public void addString(String toAdd) { linkAll.add(toAdd); counter++; } public ArrayList getList() { return linkAll; } public String outputList() { Object arr[] = linkAll.toArray(); int used[] = new int[counter]; int inlineCtr = 0; while(used[counter-1] != counter) { for(int i = inlineCtr + 1; i <= counter - 1; i++) { linkAllOutput += (String)arr[inlineCtr] + ":" + (String)arr[i] + "\n"; } used[inlineCtr] = inlineCtr + 1; inlineCtr++; } return linkAllOutput; } }
und so benutzt du das ganze (hättest sicher auch selber rausgefunden :D):
public class TestLinkAll { public static void main( String args[] ) { LinkAll lAll = new LinkAll(); lAll.addString("eis"); lAll.addString("Wasser"); lAll.addString("dampf"); lAll.addString("gelber Schnee"); System.out.println(lAll.outputList()); } }
die ausgabe von dem Testprogramm wäre dann:
eis:Wasser
eis:dampf
eis:gelber Schnee
Wasser:dampf
Wasser:gelber Schnee
dampf:gelber Schnee[EDIT]
Ui ^^ was ich gerade rausgefunden habe ist, dass man toArray auch bei LinkedList benutzen kann... demnach kannst du das oben in der Klasse und bei der Rückgabefunktion ändern , macht ja keinen unterschied...
-
Hier meine Lösung:
import java.util.*; class LinkedList { private Vector list = new Vector(); public void AddStr(String str) { this.list.addElement(str); } public String OutList() { String Linked = new String(); for (int x = 0;x<=(list.size()-1);++x) for(int y = (x+1);y<=(list.size()-1); Linked +=(list.elementAt(x) + ":" + list.elementAt(y++) + "\n")); return Linked; } }
so benutzen :
class list { public static void main(String[] args) { LinkedList a = new LinkedList(); a.AddStr("eis"); a.AddStr("feuer"); a.AddStr("wasser"); a.AddStr("schnee"); System.out.println(a.OutList()); } }
bisschen kleiner ^^
[edit] die methode OutList() liefert den String zurück, hatte vorher direkte ausgabe, so lässt es sich noch verwenden![/edit]