Schleife über Schleifen

Status
Nicht offen für weitere Antworten.

Leroy42

Top Contributor
Mal 'ne Frage zum Programmierstil.

Wenn ich, z.B. für statistische Berechnungen, eine variable Anzahl
von verschachtelten Schleifen durchlaufen muß, benutze ich derzeit
Rekursion. Kann man das irgendwie statisch coden und/oder
eleganter machen?

Beispiel:

Um die möglichen Augenzahlen bei einem Würfel zu generieren,
kann ich schreiben:

Code:
for (int i=1; i <= 6; ++i)
  "machwasMit(i)";
Bei zwei Würfeln sieht der code so aus

Code:
for (int i1=1; i1 <= 6; ++i1)
  for (int i2=1; i2 <= 6; ++i2)
    "machwasMit(i1,i2)";
Bei k Würfeln sieht der code so aus

Code:
for (int i1=1; i1 <= 6; ++i1)
  for (int i2=1; i2 <= 6; ++i2)
    ...
      for (int ik=1; ik <= 6; ++ik)
        "machwasMit(i1,...,ik)";
Läßt sich sowas auch statisch verallgemeinern indem man
irgendwie eine Array von Indizes benutzt? Oder geht es nur
rekursiv? :bahnhof:
 
B

Beni

Gast
Das ist statisch möglich, und zwar indem du die Indices in einem Array speicherst. Die Schleife sieht dann etwa so aus:
Code:
int[] indices = {0, 0, 0, 0};
int[] max = {1, 2, 3, 4};

while( true ){
  // inkrementieren
  for( int i = 0; i < indices.length; i++ ){
    if( indices[i]+1 == max[i] )
       indices[i] = 0;
     else{
       indices[i]++;
       break;
     }
  }
  
  // Indices für irgendwas verwenden
}

Du schaust, ob du den letzten Index ikrementieren kannst. Falls ja, dann mach das; falls nein, dann setz ihn auf 0 und gucke dir den 2.letzten an...

Die Abbruchbedingung ist, dass gar kein Index mehr inkrementiert werden kann.
 
S

SlaterB

Gast
möglich ist vieles

Code:
public class Test {

	public static void main(String[] args) throws Exception {
		int k = 3; // Anz Schleifen
		int iMax = 2; // maxIndex pro Schleife
		int[] i = new int[k];
		
		while (true) {
			int ii = k-1;
			while ((ii >= 0) && (i[ii] == iMax)) {
				ii--;
			}
			
			if (ii < 0) {
				break; // Abbruch
			}
			
			i[ii]++;
			while (ii < k-1) {
				ii++;
				i[ii] = 0;
			}

			System.out.println(ausgabe(i));

		}
	}


	public static String ausgabe(int[] arr) {
		String st = "";
		for (int i=0; i< arr.length; i++) {
			st += arr[i]+" ";
		}
		return st;
	}
}

edit:
hmm, das von Beni ist schöner, wenn auch noch der Abbruch nach dem kompletten Durchlauf fehlt
 

Bleiglanz

Gesperrter Benutzer
so richtig überzeugt mich das jetzt nicht?

wo werden da die Kombinationen der Würfe ausgegeben (aber klar, dass man leicht multidimensional durchwandern kann)

meistens ist der Ersatz für eine Iteration einfach eine Stack/Listenlösung, die eben auch mehr Speicher verbrät, weil man die Rekursion von Hand nachmacht

Code:
    public static void multiiterate(int n, int from, int to) {
        List<int[]> liste = new ArrayList<int[]>();
        
        int[] seed = new int[n];
        Arrays.fill(seed, 1);
        liste.add(seed);
        
        for(int dim=0;dim<n;dim++){
            List<int[]> neueListe = new ArrayList<int[]>();
            for(int[] eintrag : liste){
                for (int i = from; i < (to+1); i++) {
                    int[] neu = eintrag.clone();
                    neu[dim] = i;
                    neueListe.add(neu);
                }
            }
            liste = neueListe;
        }
        // ganze Liste ausgeben (könnte man auch bei der "letzen" 
        // Dimension erledigen...
        for (int[] arr : liste) tutwas(arr);
    }

    public static void tutwas(int[] wurf) {
        System.out.println(Arrays.toString(wurf));
    }
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
ModellbahnerTT Problem: Schleife über Textdatei Allgemeine Java-Themen 5
T Verschachtelte For-Schleife gibt falschen Wert zurück, Abbruchbedingung evtl. falsch? Allgemeine Java-Themen 9
A verschachtelte for-Schleife in einen Stream umwandeln? Allgemeine Java-Themen 4
A Wie schreibe ich eine For-Schleife in ein Stream API um? Allgemeine Java-Themen 12
W While Schleife funktioniert nicht ganz Allgemeine Java-Themen 4
H do-while Schleife funktioniert nicht wie ich es möchte Allgemeine Java-Themen 7
MangoTango Operatoren while-Schleife für Potenz Allgemeine Java-Themen 3
berserkerdq2 Wie synchronisiere ich eine for-Schleife Allgemeine Java-Themen 12
N Warum wird die For Schleife nicht betreten Allgemeine Java-Themen 4
M Schleife für einen TicTacToe Computer Allgemeine Java-Themen 5
Lukas2904 Schleife mit ansteuerung einer Klasse Allgemeine Java-Themen 5
A For-Schleife Allgemeine Java-Themen 5
J Algorithmen Analyse einer Schleife Allgemeine Java-Themen 6
1 Klassen Variabel aus Schleife übergeben Allgemeine Java-Themen 8
D "Automatisierte", variable verschachtele for-Schleife Allgemeine Java-Themen 9
F Schleife funktioniert nicht richtig Allgemeine Java-Themen 13
K For-Schleife <> oder != Operator verwenden? Allgemeine Java-Themen 2
J Einen Thread in einer Schleife Allgemeine Java-Themen 2
D While-Schleife - if Zweig unterbrechen Allgemeine Java-Themen 1
F Zweifache For-Schleife Allgemeine Java-Themen 6
P Operatoren Problem mit Zähler in recursiver Schleife Allgemeine Java-Themen 2
T String aus While Schleife für ganze Klasse sichtbar machen Allgemeine Java-Themen 5
M While-Schleife schneller, solange die Abbruchbedingung nicht vom Schleifeninneren abhängt Allgemeine Java-Themen 3
S Variablen String[] Array per schleife in int[] einlesen Allgemeine Java-Themen 8
D Methoden Buttons erscheinen doppelt nach Wiederholung in Schleife Allgemeine Java-Themen 1
RalleYTN Problem bei Schleife die durch einen 2D raum iterieren soll Allgemeine Java-Themen 1
T for - Schleife Allgemeine Java-Themen 1
J While Schleife ausführen bis Zahl = X Allgemeine Java-Themen 19
R Komplizierte Schleife Allgemeine Java-Themen 1
Q For-Schleife in String-Value Allgemeine Java-Themen 3
F Abstrakte Klasse in "For each" Schleife Allgemeine Java-Themen 1
F for-Schleife auf Kommandoebene ausgeben Allgemeine Java-Themen 9
P Input/Output java.util.Scanner in einer Schleife und Exception-Behandlung: Einlesen einer Zahl Allgemeine Java-Themen 4
P Erweiterte For Schleife Allgemeine Java-Themen 7
D Arraylist/For Schleife/Scanner Allgemeine Java-Themen 30
Y automatisierte for Schleife Allgemeine Java-Themen 13
B For schleife und weiter? Allgemeine Java-Themen 8
D Probleme bei for-Schleife Allgemeine Java-Themen 4
L einfache Verzinsung mit for-Schleife & Ausschluss von Werten beim Einlesen Allgemeine Java-Themen 5
N Frage zur while-Schleife Allgemeine Java-Themen 18
M for Schleife mit Swing Button abbrechen Allgemeine Java-Themen 7
M PdfPTable per for-Schleife befüllen Allgemeine Java-Themen 3
F for-Schleife mit : Allgemeine Java-Themen 5
S Pattern.Match Suche: For Schleife einbinden und in Liste schreiben Allgemeine Java-Themen 3
W Problem mit Index in einer for-Schleife Allgemeine Java-Themen 8
A Collections Array-Elemente in ArrayList kopieren ohne Schleife Allgemeine Java-Themen 7
P Variablen Auf durch for-Schleife generierte JComboBox zugreifen Allgemeine Java-Themen 3
G while Schleife ausführen solange eine Taste gedrückt ist Allgemeine Java-Themen 14
F Foreach und for - Schleife Allgemeine Java-Themen 10
W Berechnung Durchschnitt mit Schleife Allgemeine Java-Themen 9
S for-Schleife, while-Schleife Problem Allgemeine Java-Themen 6
H Netbeans Warning bei Thread.sleep in Schleife Allgemeine Java-Themen 4
A java.lang.NullPointerException bei Schleife Allgemeine Java-Themen 3
S Erste Schritte Exception beendet Schleife nicht - Methode macht trotz throw weiter? Allgemeine Java-Themen 9
R while schleife auf 3 durchgänge beschränken Allgemeine Java-Themen 6
V anstatt thread.join() einfach while schleife? Allgemeine Java-Themen 8
x22 for-Schleife Allgemeine Java-Themen 76
S Text in for Schleife in Label einfügen Allgemeine Java-Themen 4
J Schleife mit : Allgemeine Java-Themen 18
S Klassen in einer Schleife durchlaufen Allgemeine Java-Themen 11
E Schleife wird nicht ausgeführt!!! Allgemeine Java-Themen 8
C Schleife mit leerem Anweisungsblock wird trotz erfüllter Bedingung nicht verlassen Allgemeine Java-Themen 9
S Do-While Schleife bricht nicht ab Allgemeine Java-Themen 3
S Erste Schritte if-Anweisung in for- oder while-schleife umwandeln Allgemeine Java-Themen 3
K CheckBox schleife Allgemeine Java-Themen 2
D Methoden Thread Schleife Status Allgemeine Java-Themen 7
J Verschiedene Klassen als "Object" in ArrayList und dann in for-Schleife erzeugen!? Allgemeine Java-Themen 2
R In einer for Schleife bei einem Substring anfangen, wo man davor aufgehört hat Allgemeine Java-Themen 6
T Rekursion mit While Schleife kombinieren? Allgemeine Java-Themen 4
D Sterne Muster mit einer Schleife Allgemeine Java-Themen 5
Dragonfire Code Konvention for-Schleife / return Allgemeine Java-Themen 15
hdi Detail-Frage zur for-Schleife Allgemeine Java-Themen 9
J Thread pausieren, lange while-Schleife Allgemeine Java-Themen 8
Q Variable aus Schleife/Switch benutzen Allgemeine Java-Themen 7
J Erweiterte For-Schleife mit Vector Allgemeine Java-Themen 5
C Geschachtelte For-Schleife: Äußere Schleife wird nur einmal durchlaufen!? Allgemeine Java-Themen 3
W While-ESC-Schleife funktioniert nicht Allgemeine Java-Themen 3
W return Collection mit schleife durchsuchen Allgemeine Java-Themen 10
H Threads.... ich will aus der While-Schleife raus Allgemeine Java-Themen 6
calzone Warum wird nicht aus der Schleife gesprungen ? Allgemeine Java-Themen 2
lacyuu Schleife hängt sich auf, wieso?? Allgemeine Java-Themen 2
S Wie gross ist die Laufzeit für diese Schleife?? Allgemeine Java-Themen 8
J Schachbrett mit for- oder while-Schleife Allgemeine Java-Themen 22
I For- Schleife falsch? Allgemeine Java-Themen 8
T Schleife kurzzeitig anhalten Allgemeine Java-Themen 5
V Problem in While-Schleife Allgemeine Java-Themen 3
Escorter Switch in der Schleife! Allgemeine Java-Themen 4
C Auswertung der for each schleife? Allgemeine Java-Themen 2
GilbertGrape foreach Schleife Allgemeine Java-Themen 12
J FOR-Schleife-Problem Allgemeine Java-Themen 10
G Schleife durch Button beenden Allgemeine Java-Themen 6
S Schleife funktioniert nicht Allgemeine Java-Themen 2
G Anonymen Buttons in for schleife ActionListener hinzufügen Allgemeine Java-Themen 5
T getParameter in while schleife Allgemeine Java-Themen 3
O while - Schleife unterbrechen mit break; Allgemeine Java-Themen 5
R array.length in For-Schleife verwenden? Allgemeine Java-Themen 22
V Schleife funktioniert nicht wie gewünscht Allgemeine Java-Themen 5
T Schleife im Konstruktor? Allgemeine Java-Themen 9
S Schleife mit Durchlaufrate Allgemeine Java-Themen 5
R Per for schleife string propertys in einer datei speichern Allgemeine Java-Themen 15

Ähnliche Java Themen

Neue Themen


Oben