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.


quelle

Antworten:

14
for (int i = -4; i <= 4; i++) {
    System.out.println(4 - Math.abs(i));
}
kan
quelle
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
Freeman
quelle
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 +" ");
  }
Ken
quelle
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.

Thomas
quelle
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 
Arvind Kumar Avinash
quelle
1
for(int i = 0; i < 9; i++){
     int j = i;
     if(i >= 5)
         j = 8 - i;
     System.out.println(j);
}
Delphi1024
quelle
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);
QuantumDeveloper
quelle
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; }

Alex L.
quelle
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+ " ");
       }
Ken
quelle