Zapnij przód i tył w jednej linii

11

Myślę, że to interesujące pytanie. Możemy zapętlić w jeden sposób, ale czy możemy zapętlić go do tyłu w tej samej linii? Pozwól mi wyjaśnić, co mam na myśli. Oto przykładowy kod:

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

Szukam, czy istnieje jakieś obejście, aby można było wydrukować powyższe oświadczenie 0,1,2,3,4,3,2,1,0?


źródło

Odpowiedzi:

14
for (int i = -4; i <= 4; i++) {
    System.out.println(4 - Math.abs(i));
}
kan
źródło
2

Możesz to również sprawdzić:

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

wynik :

0 1 2 3 4 3 2 1 0
Obywatel
źródło
2

Cała logika w jednym wierszu, o co poprosił PO

  for(int i=0, d=1; i>=0 ;d=(i==4?-1:d), i+=d){
    System.out.print(i +" ");
  }
Rozpoznać
źródło
1
Ta odpowiedź jest niesamowita i bardziej ogólna niż reszta (+1) - możesz zamienić 0 i 4 w warunkach pętli dla argumentów funkcyjnych takich jak min i max, a następnie jest to bardzo ogólne! 👏
Alex L
1

Przy odrobinie arytmetyki możesz:

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

Ale użycie dwóch forpętli jest łatwiejsze do pisania i czytania.

Tomasz
źródło
1

Proszę bardzo

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) + " ");
        }
    }
}

Wynik:

0 1 2 3 4 3 2 1 0 
Arvind Kumar Avinash
źródło
1
for(int i = 0; i < 9; i++){
     int j = i;
     if(i >= 5)
         j = 8 - i;
     System.out.println(j);
}
Delphi1024
źródło
1

Nie ma tak naprawdę prostego sposobu na zrobienie tego, ale z kilkoma modyfikacjami możesz uzyskać pętlę, która może zmienić kierunek:

for(int i = 0, direction = 1; 0 <= i && i < 5; direction = (i == 5-1) ? -direction : direction, i += direction)
    System.out.println(i);
QuantumDeveloper
źródło
0

W Javie (ogólne, nie musi być od 0 do N):

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);

W JavaScipt (tylko po to, aby zobaczyć demo na żywo):

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.
źródło
0

Ogólny jeden linijka, cała logika jest w forwyrażeniach.

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+ " ");
       }
Rozpoznać
źródło