JAVA: alle Kombination gegebener Zeichen

Dieses Thema JAVA: alle Kombination gegebener Zeichen im Forum "Webentwicklung, Hosting & Programmierung" wurde erstellt von Michael_B, 24. Okt. 2004.

Thema: JAVA: alle Kombination gegebener Zeichen Hiho... ich kniffele gerade an einer Methode, die mir zu einem gegebenen Char-Array alle möglichen Kombinationen...

  1. Hiho...

    ich kniffele gerade an einer Methode, die mir zu einem gegebenen Char-Array alle möglichen Kombinationen ausspuckt. Wenn also die Zeichen a, b und c gegeben sind, sollen die Kombinationen abc, acb, bac, bca, cab und cba ausgegeben werden. Jedes gegebene Zeichen darf auch nur einmal in einer Kombination erscheinen...
    Klingt eigentlich ganz einfach aber irgendwie bin ich zu offenbar zu blöd dafür, nen vernünftigen Lösungsansatz zu finden...

    Hat da jemand ne Idee?
    THX in advance
    M.
     
  2. Jo, das ist eigentlich ganz einfach:

    Code:
    n!
    
    Wobei n die Anzahl der Elemente deines Array ist, also im Beispiel a, b, c n=3
     
  3. n! ist mir klar. Ich wollte aber nicht die Anzahl der möglichen Kombinationen, sondern die Kombinationen selbst. Z. B. auf Console ausgegeben.

    Greetz
    M.
     
  4. Oh, entschuldige. Da kann mal wieder einer nicht lesen. Ist schon spät ;D
    Dann werde ich mir deines Problems bezüglich heute mal keine Gedanken mehr machen und das auf morgen verschieben, würde glaube ich eh nur Müll rauskommen ;D

    Sorry.
     
  5. Macht nix. Dennoch danke... irgendwie komm ich auch nicht drauf... kann doch nicht so schwer sein. Frickele gerade an einer rek. Lösung. Ich glaube Rekursion ist bei diesem Problem absolut notwendig.

    Ansatz:

    Methode printCombos(String wort, Vector bs) //bs=buchstaben. wort ist beim allerersten Mal ein leerer String.

    Methode macht nun für jeden Buchstaben im Vector folgendes {
    schreibe den Buchstaben ins Wort
    entferne den Buchstaben aus dem Vector. Jetzt sind nur noch alle anderen Buchstaben drin.
    rufe printCombos auf mit dem Wort und dem neuen (reduzierten) Vector
    }

    Funktioniert aber nicht wirklich. :(
     
  6. Hi

    Sollte so gehen:

    possibilities(String[] arr, StringBuffer erg) {
    if (arr.length == 0) {
    sysout(erg.toString);
    return;
    }

    for (int i = 0; i < arr.length;i++) {
    possibilites(arr[ohne element i :)], erg.clone().append(arr));
    }
    }

    Ist halt die Frage ob du das als Rückgabewerte oder nur auf stdout haben willst.

    Gruß, Michael
     
  7. Hab das jetzt mal so umgesetzt:

    Code:
    public class BsKombo {
    
    public static void possibilities(String[] arr, StringBuffer erg) {
      
      if (arr.length == 0) {
        System.out.println((erg.toString()));
        return;
      }
      
      for (int i = 0; i < arr.length;i++) {
        possibilites(arr, erg.clone().append(arr[i]));
      }
    
    }
    
    
    public static void main(String[] args) {
    
    String[] urwort = new String[] {U, H, D, N};
    
    possibilities(urwort, new StringBuffer());
    
    }
    
    }
    Bekomme aber immernoch den Fehler, dass clone() protected access in java.lang.Object hat und irgendwie nicht mit StringBuffer erg verknüpft werden kann.

    Greetz
    M.
     
  8. Hi

    Eine Sache ist noch falsch, du reduzierst das Problem bei der Rekursion nicht. Aus dem arr den du an die aufgerufene Funktion weitergibst muss das i Element raus, da dass ja benutzt wurde. Dafür kannst du dir ja eine eigene Funktion schreiben, war ich zu faul für :)

    Wegen dem StringBuffer.clone() muss ich mal gucken. Ansonsten nimm String erg + arr, legt ja auch ein neues Objekt an.

    Gruß, Michael
     
  9. Hi... hier mal deine Idee jetzt inkl. Reduktion des Arrays. Hab aus dem Array einen Vector gemacht, da man hier leichter ein Objekt rausschmeissen kann.

    Code:
    import java.util.*;
    public class BsKombo {
       
       public static void possibilities(Vector arr, String erg) {
         
            if (arr.size() == 0) {
              System.out.println(erg);
              return;
            }
            
            Enumeration enu = arr.elements(); 
            
            while (enu.hasMoreElements()) {
              String tmp = (String)enu.nextElement();
              Vector t = new Vector(arr);
              arr.removeElement(tmp);
              possibilities(t, erg+tmp);
           }
       }
       
       
       public static void main(String[] args) {
          
          Vector urwort = new Vector();
         urwort.addElement(new String(a));
         urwort.addElement(new String(b));
          
          possibilities(urwort, );
          
       }
       
    }
    
    Jetzt bekomme ich folgende Exceptions beim Ausführen:
    java.lang.StackOverflowError
    at java.util.Vector.<init>(Vector.java:144)
    at BsKombo.possibilities(BsKombo.java:15)
    at BsKombo.possibilities(BsKombo.java:17)
    at BsKombo.possibilities(BsKombo.java:17)
    at BsKombo.possibilities(BsKombo.java:17)
    at BsKombo.possibilities(BsKombo.java:17)
    ... (jede Menge davon)

    Langsam bin ich mit meinem Latein am Ende....
     
  10. Hi

    Das Problem müsste sein, dass der Vector beim remove nach dem originalen Stringobjekt sucht. Durch das auslesen wird aber glaube ein neues Objekt angelegt was nicht die gleiche Referenz hat. Alternativ könntest du eine Hashtable nehmen, der macht einen Stringvergleich.

    Gruß, Michael
     
Die Seite wird geladen...

JAVA: alle Kombination gegebener Zeichen - Ähnliche Themen

Forum Datum
Winsdows Installer installiert Java unter Visat nicht Windows XP Forum 1. Dez. 2007
Java Plug-in 1.4.2_03 is not installed properly Software: Empfehlungen, Gesuche & Problemlösungen 11. März 2004
Java Downloader lässt sich nicht sauber installieren Software: Empfehlungen, Gesuche & Problemlösungen 5. Okt. 2016
Ist Java runtime envirement 1.7.0 mit Java 6 verträglich? Windows XP Forum 11. Jan. 2016
Welchen Firefox und welche Java-Version ?? Windows 7 Forum 16. Dez. 2015