Schleife vorne und hinten in einer Linie


11

Ich denke, das ist eine interessante Frage. Wir können auf eine Weise schleifen, aber können wir es in derselben Zeile rückwärts schleifen? Lassen Sie mich erklären, was ich meine. Hier ist ein Beispielcode:

for(int i = 0; i < 5; i++) { // we all know the output will be 0,1,2,3,4

Ich suche, ob es eine Problemumgehung gibt, damit die obige Anweisung gedruckt werden kann 0,1,2,3,4,3,2,1,0.

java 

Antworten:


14
for (int i = -4; i <= 4; i++) {
    System.out.println(4 - Math.abs(i));
}

2

Sie können dies auch überprüfen:

int a=1;
for(int i=0 ; i>-1 ; i+=a){
if (i==4)a=-a;
System.out.print(i +" ");
}

Ausgabe :

0 1 2 3 4 3 2 1 0

2

Die gesamte Logik in einer Zeile, wie vom OP verlangt

  for(int i=0, d=1; i>=0 ;d=(i==4?-1:d), i+=d){
    System.out.print(i +" ");
  }

1
Diese Antwort ist fantastisch und allgemeiner als die anderen (+1) - Sie können 0 und 4 in den Schleifenbedingungen für Funktionsargumente wie min und max ersetzen und dann ist es sehr allgemein! 👏
Alex L

1

Mit ein wenig Rechnen können Sie:

for (int i = 0; i < 9; i++) {
    System.out.println(4 - Math.abs(4 - i));
}

Die einfache Verwendung von zwei forSchleifen ist jedoch einfacher zu schreiben und zu lesen.


1

Bitte schön

public class Main {
    public static void main(String[] args) {
        for (int i = 0, j = 8; i < 5 || j >= 0; i++, j--) {
            System.out.print((i < 5 ? i : j) + " ");
        }
    }
}

Ausgabe:

0 1 2 3 4 3 2 1 0 

1
for(int i = 0; i < 9; i++){
     int j = i;
     if(i >= 5)
         j = 8 - i;
     System.out.println(j);
}

1

Es gibt keine wirklich einfache Möglichkeit, dies zu tun, aber mit ein paar Änderungen können Sie eine Schleife erhalten, die die Richtung ändern kann:

for(int i = 0, direction = 1; 0 <= i && i < 5; direction = (i == 5-1) ? -direction : direction, i += direction)
    System.out.println(i);

0

In Java (generisch, muss nicht zwischen 0 und N liegen):

public static void forwardAndBack(int min, int max) {
  for (int i = 0; i < (max - min + 0.5) * 2; i++) {
    System.out.println((min + i) > max ? max - (min + i - max) : min + i);
  }
}
forwardAndBack(1, 4);

In JavaScipt (nur damit Sie die Live-Demo sehen können):

function forwardAndBack(min, max) {
  for (let i = 0; i < (max - min + 0.5) * 2; i++) {
    console.log(min + i > max ? max - (min + i - max) : min + i);
  }
}
forwardAndBack(1, 4);
.as-console-wrapper { max-height: 100% !important; top: 0; }


0

Als generischer Einzeiler befindet sich die gesamte Logik in den forAusdrücken.

int start = 0;
int max = 4;
  for(int n= start, asc = start, desc = max * 2 - start;  
       (n = asc < desc ? asc: desc) >= start ; 
       asc++, desc--)
       {
          System.out.print(n+ " ");
       }
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.