nested for loops

Hansebas

Mitglied
Moin,

ich bastel wieder mal ein wenig rum und komme an einer Stelle nicht weiter. Ich habe mir folgende Methode gebaut.
Java:
public static void forRunner(int runs) {
start = System.currentTimeMillis();
for (int i = 0; i <= runs; i++) {
  as++;
  for(int j = 0; j<=runs;j++) {
   is1++;
   for (int k = 0; k<=runs;k++) {
    is2++;
    for (int l = 0; l<=runs;l++) {
     is3++;
     for (int m=0;m<=runs;m++) {
      is4++;
      for (int n=0;n<=runs;n++) {
       is5++;
       for (int o=0;o<=runs;o++) {
        is6++;
        for (int p=0;p<=runs;p++) {
         is7++;
         for (int q=0;q<=runs;q++) {
          is8++;
          for (int r=0;r<=runs;r++) {
           is9++;
           for (int s=0;s<=runs;s++) {
            is10++;
           }
          }
         }
        }
       }
      }
     }
    }
   }
  }
}
ende = System.currentTimeMillis();
}

Nach ausführen der Methode sollen mir die Anzahl der Durchläufe der Schleife sowie benötigte Zeit angegeben werden. Das klappt auch soweit.

Nun möchte ich aber nicht jedesmal den Wert für "runs" manuell anpassen, also schwebt mir eine weitere for-Schleife vor, die wie folgt aussieht.

Java:
  for (int a=0; a<=1; a++) {
   forRunner(a);
  }

So ganz kann das aber nicht stimmen, da beim Aufruf der Methode ohne for-Schleife ich für die äußere Schleife 2 Durchläufe bekomme. Führe ich die Methode in der for-Schleife durch, werden 3 Durchläufe gezählt.

Wo liegt mein Gedankenfehler?
 
X

Xyz1

Gast
relevant ist doch eigentlich nur is10-Zähler...

Davon abgesehen ist aber die Verschachtelungsbreite zu hoch.
Java:
public static void fe(int ix, int n, Consumer<Integer[]> c) {
	for (int i = 0; i < n; i++) {
		c.accept(new Integer[] { ix, i });
		if (ix > 0) {
			fe(ix - 1, n, c);
		}
	}
}

public static void main(String[] args) {
	fe(3, 2, i -> System.out.println(java.util.Arrays.toString(i)));
}
 

Hansebas

Mitglied
Moin,

mag sein. Ich habe mich damit halt an das Thema verschachtelte for-Schleifen herangetastet. Anfangs habe ich mir jeden Schleifendurchlauf ausgeben lassen. Also anfangs sah es so aus
Java:
for(i=0;i<=10;i++) {
    System.out.println(i + " .Lauf");
    for (j=0;j<=10;j++){
       System.out.println("\t"+j+" .Lauf");
    //usw...
    }
}
Das habe ich dann langsam aufgebläht. Ab der 3.Inneren wurde es mir in der Konsole zu viel gescrolle. Also habe ich mir dann nur noch die Ergebnisse anzeigen lassen. Dann kam die Zeitmesserei dazu und irgendwann hatte ich keinen Bock mehr die Läufe manuell anzupassen. Das mache ich mittlerweile auch ein wenig anders.

Ab der 10. wurde mir die Kopiererei zu blöde … hatte aber noch keine Idee, wie ich das verschlanken kann. Damit wollte ich mich am WE befassen. Das werde ich wohl brauchen um deine Lösung zu kapiereno_O Aber wird schon. So habe ich schon mal einen Ansatz.
 

Ähnliche Java Themen

Neue Themen


Oben