Erste Schritte Dynamische Anzahl von verschachtelten Schleifen

Pablo

Mitglied
Hallo!
Ich bin auf der Suche nach einer Möglichkeit, die Anzahl der verschachtelten Schleifen dynamisch zu gestallten.
Beispiel bei einer Anzahl von 3

Java:
for (int a = 1; a <= x ;a++ ) {
    for (int b = 1; b <= x ;b++ ) {
        for (int c = 1; c <= x ;c++ ) {
        }
    }       
}
oder 5
Java:
for (int a = 1; a <= x ;a++ ) {
    for (int b = 1; b <= x ;b++ )  {
        for (int c = 1; c <= x ;c++ )  {
            for (int d = 1; d <= x ;d++ ) {
                for (int e = 1; e <= x ;e++ )  {
                }
            }
        }
    }       
}

... mir ist klar, dass es sich nicht so wie ich es beschrieben habe realisieren lässt. Wahrscheinlich irgendwie über einen wiederholten Methodenaufruf. Habe nur keine Ahnung wie!
Vielen Dank schon mal.
Ciao Pablo
 
Zuletzt bearbeitet von einem Moderator:
Erklär doch mal was du damit erreichen willst.
Wenn wir wissen was genau damit bezwecken willst, können wir dir besser helfen.

p.s. nutz doch bitte die
Java:
 tags für deinen code
 
Hallo,
dein Problem kannst du mit Rekursion angehen:

Java:
public static void main(String[] args)
	{
       forloop(
	   10, 
	   0,
	   5,
	   new Runnable(){
		   public void run(){
			   //Was passieren soll
			   System.out.println("x");
			   
		   }
		   
	   });
	}
	
	private static void forloop(final int count,int loopCount,final int maxLoopCount,final Runnable action){
		loopCount++;
		for(int i = 1 ; i < count; i++){
			if(loopCount <= maxLoopCount){
			  forloop(count , loopCount,maxLoopCount, action);
			}else{
			  action.run();
			}
		}
		
	}
Sollte irgendwie so aussehen, hab nicht getestet ob das Funktioniert bzw. die richtige Anzahl an durchlaufen hat.

Gruß,
AntiMuffin
 
@AntiMuffin

Ich verstehe an deinem Beispiel zwei Sachen nicht:
1. Warum benutzt du Runnable?

2. Erzeugst du nicht eine Art Schneeball-Effekt?
Wenn count beispielsweise gleich 5 ist, dann rufst du in der Schleife 5 weitere Mal die Methode auf. Und dann in jedem Aufruf wieder 5 weitere und so weiter.
 
1. Weil ich die Funktionalen Interfaces nicht auswendig kenne und ich irgendwie einen Sinn haben sollte, ich wollte einfach was aufrufen ^_^
2. Naja ist halt ein Rekursiver Aufruf. Ja jede schleife wird dann immer 5mal aufgerufen, wie bei dem Beispiel von @Pablo, dabei wird action 5^n mal aufgerufen, wobei n die Anzahl von Schleifen ist. In meinem Beispiel wäre es natürlich besser einfach eine Schleife zu deklarieren die 5^n bzw count^n mal durchläuft. Aber ich wollte Ihm einen Ansatz geben die Schleifenanzahl Dynamisch zu erstellen, auch wenn man dies wahrscheinlich einfacher lösen kann, aber ich kannte ja das eigentliche Problem nicht.
 
Hallo AntiMuffin!
Also ich möchte gerne in meiner App in einer chemischen Formel mit mehreren Elementen überprüfen, welche Oxidationsstufen der einzelnen Elemente in Frage kommen. Hierbei gilt ja, dass die Landung der Formel (also Summe aus allen Elementen) dabei in der Summe immer 0 sein muss!
Beispiel:
Mögliche Oxidationsstufen von Wasserstoff (H) = -1 und 1
Mögliche Oxidationsstufen von Sauerstoff (O) = -2 und -1
Mögliche Oxidationsstufen von Schwefel (S) = -2, 2, 4, und 6
Diese Werte müssen als statische Daten (z.B. als enum oder Konfig Datei) hinterlegt werden, da sie immer gleich sind! Als Beispiel habe ich nur drei Elemente rausgesucht. Später möchte ich natürlich das ganze Periodensystem in der Datenbank haben.
Jetzt die zu überprüfende Formel die vom Benutzer eingegeben wird:
H[SUB]2[/SUB]SO[SUB]4[/SUB] (Schwefelsäure). Die Ladung der Schwefelsäure ist nach außen 0
Jetzt soll überprüft werden, welche und (falls vorhanden) wie viele Möglichkeiten es hier gibt.
Also H ist zweimal vorhanden, S einmal und O viermal.
In diesem Fall, bei 3 Elementen, könnte ich (theoretisch) mit drei ineinander verschachtelten Schleifen alle möglichen Kombinationen abfragen!
Ich fange mal mit der ersten Möglichkeit an (also alle Zähler aller Schleifen auf 1):
H -1, O -2 und S -2
Als Summe für H[SUB]2[/SUB]SO[SUB]4 [/SUB]würde heraus kommen: 2*-1 + 1*-2 + 4*-2 = -12! Das passt schon mal nicht. Wie gesagt, die Formel muss ja nach außen die Ladung 0 haben.
Irgendwann würde man dann bei dieser Möglichkeit landen
(Zähler erste Schleife (H): 2 ; Zähler zweite Schleife (O): 1 ; Zähler dritte Schleife (S): 4):
H 1, O -2 und S 6
Als Summe für H[SUB]2[/SUB]SO[SUB]4 [/SUB]würde heraus kommen: 2*1 + 1*-2 + 4*6 = 0! Das passt ! J
Mein Problem ist jetzt, das ich ja mit variablen Formeln arbeiten möchte. Also zum Beispiel auch mit H[SUB]2[/SUB]O (2 Elemente) oder KSCN (4 Elemente). Da kann ich mit meinen 3 statischen Schleifen nichts anfangen. L
Deswegen brauche ich eine Methode, die sich selber aufruft oder so etwas!
P.S. Die Elemente habe ich bereits aus der Formel ausgelesen und in ein zweidimensionales String-Array gepackt!
arrElement [AnzahlElemente][2] // zweite Dimension bezieht sich auf Name und Anzahl des Elements (Index)
arrElement [1][1] = „H“, arrElement [1][2] = „2“,
arrElement [2][1] = „O“, arrElement [2][2] = „4“,
arrElement [3][1] = „S“, arrElement [3][2] = „1“,



Vielen Dank!
Ciao Pablo
 

Neue Themen


Zurück
Oben