# Alle Möglichen Kombinationen einer Liste



## Guest (18. Okt 2007)

Hallo allerseits,

nachdem ich mir stunden den Kopf mit dem Problem zermartert habe, möchte ich euch nun um Rat bitten. Vlt. schafft es ja jemand diese Nuss zu knacken. Es ist mit sicherheit nicht easy, aber auf jeden Fall machbar. (Nur nicht für mein kleines Hirn   )

Es geht darum das ich eine Liste habe:


```
List CharacterList = new ArrayList();
    
    // Buchstaben
    CharacterList.add("a");
    // bis ...
    CharacterList.add("z");
    
    // Umlaute
    CharacterList.add("ä");
    ///...

    // Zahlen
    CharacterList.add("0");
    // bis ...
    CharacterList.add("9");
    
    // Sonderzeichen    
    CharacterList.add(".");
    CharacterList.add("§");
    CharacterList.add("$");
    CharacterList.add("\\");
```

und ich damit jetzt sämtliche möglichkeiten durchgehen will.

Also: 
a      bis     \

dann von...
aa    bis     a\

weiter mit...
ba    bis     b\

bis schließlich
\a    bis     \\

dann die nächste Ziffer
aaa  bis     aa\

weiter mit
aba bis ab\

uns so weiter und sofort bis schließlich und endlich: \\\\\\ (z.B.)


Mir ist einzig und allein dieser Lösungsansatz bis jetzt eingefallen:


```
for (int i=0; i < CharacterList.size(); i++)
    {
       String ErsteZiffer = CharacterList.get(i).toString();
      
        for (int b=0; b < CharacterList.size(); b++)
        {
          String tKompletterString= ErsteZiffer + CharacterList.get(b).toString();
          System.out.println(tKompletterString);
        } 
    }
```

Man könnte jetzt z.B. für 6 Stellen, 6 Schleifen ineinander verketten... ist ja aber nicht so toll. Und vor allem möchte ich die Möglichkeit einbeziehen dass es mehr wie 6 oder weniger wie 6 stellen geben kann.

Um das ganze noch auf die Spitze zu treiben, kommt noch dazu dass diese Strings von einem Übergeordneten Element (String) abhängig sind.

also z.B:
a:   aaa   bis   \\\
b:   aaa   bis   \\\
bis schließlich
\:   aaa   bis   \\\
und dann:
aa: aaa bis \\\ ==> \\: aaa bis \\\    usw. ...


Den rechenaufwand den der PC dabei hat möchte ich jetzt mal ausen vor lassen. Bei einer 6 stelligen Ziffer wär das ne 1 mit 136 Nullen hinten dran, was es an möglichkeiten gäbe. Es geht mir um das rein logische.

Ich denke zwar nicht das mir jemand eine brauchbare Lösung liefern könnte, aber vlt. ja doch. Es wäre auf jeden Fall spitze wenn der ein oder andere sich mal gedanken darüber machen würde. (So am Wochenende wenn man mal nichts zu tun hat).


MfG


----------



## SlaterB (18. Okt 2007)

lange nachdenken muss man da nicht wenn man es kennt,
ganz grobe Idee:
verwende lieber Array als ArrayList, Dynamik brauchst du nicht,
fange klein an, 2 oder 3 Elemente statt viele..

z.B.
[a,b,c]
dazu ein Positionsarray
[0,0,0]
das musst du in einer Endlosschleife erhöhen, wie ein Kilometerzähler beim Auto,
001
002
003
004 -> Überlauf 010
011
012 usw

passend zum aktuellen Stand des Index-Arrays baust du dann den String zusammen
000 steht für leeren String
012 für leer + a + b
usw

schon fertig


----------



## Gast (18. Okt 2007)

Gut das ist die Kombination von 3 stellen. Ich möchte aber nicht von 3 stellen ausgehen sondern die größe modal mit einbeziehen. Sonst hätte es mein bsp auch getan. Ich möchte auch nicht mit Arrays arbeiten, sondern mit einer Liste, da das arbeiten mit der Liste viel koomfortabler ist. Zudem kommt noch das wenn das 2. element ins spiel kommt von den die anderen abhängen, man mit einem 2 dimensionalen array arbeiten muss o.ä. und ab da an wirds kompliziert.


----------



## SlaterB (18. Okt 2007)

> Ich möchte aber nicht von 3 stellen ausgehen sondern die größe modal mit einbeziehen

Array sind von Natur aus in ihre Größe beliebig,
alles hängt nur von der Zahl n ab, von der Länge des Anfangs-Arrays (in meinem Beispiel [a,b,c], aber genausogut jedes andere) 
bzw der Liste 

>  Ich möchte auch nicht mit Arrays arbeiten, sondern mit einer Liste, da das arbeiten mit der Liste viel koomfortabler ist.

allgemein schon, aber hier wirst du nur beliebig oft mit get(index) drauf zugreifen,
da ist array[index] nicht viel anders, aber egal

beim IndexArray wirst du ums int[] nicht herumkommen,
dort stattdessen mit einer Integer-Liste zu arbeiten wäre ein Krampf

>  das 2. element ins spiel kommt 

ganz habe ich das noch nicht verstanden, 
kann Probleme machen, kann man aber bestimmt auch elegant miteinbeziehen,

falls du dazu noch was sagst: bleibt es bei den 2 Dimensionen oder ist die Dimensionszahl auch beliebig?


----------



## Gast (19. Okt 2007)

Im endeffekt ist eine Liste ja ziemlich das gleiche wie ein Array, nur das Problem mit arrays ist: wie leg ich ein leeres Array an und füge dann einträge hinzu? Das geht meiner meinung nach nicht so einfach, mit listen schon. z.B. soll der Benutzer eingeben können Liste mit Umlauten; Liste mit Zahlen usw. Dazu werden dann methoden aufgerufen die die Einträge einfach adden. Mit Arrays bräuchte ich dann mehrere Arrays die teilweise den selben inhalt haben.

Das mit den 2. Elementen stell ich mir so vor

Erstes Element     zweites Element
a:                       a bis \\\
bis...
\\\\:                    a bis \\\


Mal von Listen abgesehen, ist mir auch unklar wie dein Vorschlag in der Praxis aussieht. Könntest du mal ein fertiges Bsp. zeigen? Wäre nicht schlecht.


MfG, Gast


----------



## SlaterB (19. Okt 2007)

das mit dem Einfügen am Anfang ist doch sowas von irrelevant,

gar keine Frage, dass man die Elemente zuerst in einer Liste sammeln muss,
aber das sind 10 Programmschritte am Anfang, dann steht die Menge der Elemente für die restlichen 10 Mio. Programmschritte fest,
und man kann die Liste in ein Array umwandeln..


ein Beispiel programmiere ich dir nicht, nein


----------



## Gast (19. Okt 2007)

Tja und weist du warum nicht, weil es nicht funktioniert ;-)


----------



## SlaterB (19. Okt 2007)

wie du meinst..


----------



## bygones (19. Okt 2007)

Gast hat gesagt.:
			
		

> Tja und weist du warum nicht, weil es nicht funktioniert ;-)


hehe wie geil... wenn du das schon alles weisst - interessant dass dann noch so fragen kommen.

*SlaterUnterstuetz*



> Im endeffekt ist eine Liste ja ziemlich das gleiche wie ein Array, nur das Problem mit arrays ist: wie leg ich ein leeres Array an und füge dann einträge hinzu? Das geht meiner meinung nach nicht so einfach, mit listen schon. z.B. soll der Benutzer eingeben können Liste mit Umlauten; Liste mit Zahlen usw. Dazu werden dann methoden aufgerufen die die Einträge einfach adden. Mit Arrays bräuchte ich dann mehrere Arrays die teilweise den selben inhalt haben.


einen leeren array anzulegen sollte doch bekannt sein ? wenn nicht, dann wirst du allgemein nicht viel weiterkommen....
und eintraege hinzufuegen ist sogar einfacher

```
String[] s = new String[10];
s[0] = "HALLO";

List<String> ss = new ArrayList<String>();
ss.add("HALLO");
```

und wenn du schon versch. methoden hast die einfach irgendwelche eintraege in die liste einfuegen, dann viel spass beim auslesen und casten. Also entweder du hast auch mehrer Listen, du arbeitest mit korrekten Generics (spaetestens da ist es wurscht ob Array oder Liste) oder du haust einfach alles irgendwie in die liste und holst das dann irgendwie raus (etwas unschoeners gibt es nicht).

Und generell wuerde ich vorsichtig sein von List zu sprechen und die mit einem Array zu vergleichen... nehm eine LinkedList und ruf dann get() auf... freu dich dann ueber die einbrechende Performance


----------



## Gast (19. Okt 2007)

Das ist kein leeres Array sondern ein Array mit 10 Feldern die keinen Inhalt haben, toll!

Und du weist dem Index 0 (konkret) eine variable zu.

jetzt hast du dein String Array s aber schon alle 10 felder zugewiesen und willst an 11. position (z.B.) einen neuen Eintrag hinzufügen. Geht nicht ohne ein neues Array in dem du das alte hinein kopierst. Das neue Array braucht aber wieder eine feste größe usw.

So dumm bin ich auch nicht, aber anscheinend versteht hier keiner die Problematik.

Etwas theoretisch ohne konkretes Bsp zu bringen ist nutzlos.


Ich habs mittlerweile selbst geschafft, ohne Arrays,
aber reinstellen tu ich die lösung nicht, nein ;-)

und damit auf nimmer wiedersehen


----------



## bygones (19. Okt 2007)

Gast hat gesagt.:
			
		

> Das ist kein leeres Array sondern ein Array mit 10 Feldern die keinen Inhalt haben, toll!
> 
> Und du weist dem Index 0 (konkret) eine variable zu.
> 
> ...


schau dir den code von arraylist an - dann reden wir weiter....

kleiner Tipp: *Array*list.

ob du nun einen Array nutzt und selbststaendig neue arrays erzuegst und reinkopierst oder das ueber die liste machen laesst ist wurscht....
und du glaubst doch nicht, dass mit new ArrayList du eine leere liste (bzw einen leeren Array angelegt hast ?)

aber lieber unwissen praesentieren und dann beleidigt verschwinden... cool


----------



## SlaterB (19. Okt 2007)

wobei es aber wirklich Quatsch wäre, selber mit nem Array anzufangen, da was einzufügen, die Größe verdoppeln, Array-Inhalt kopieren usw.,
also quasi ArrayList nachzubauen 

das hat aber nix damit zu tun, dass man 99.99% des Programms nichts mehr einfügt und dann ein Array benutzen kann
während am Anfang ganz klar eine Liste auf dem Plan steht


----------

