Passa davanti e dietro in una riga


11

Penso che questa sia una domanda interessante. Possiamo fare un ciclo in un modo, ma possiamo farlo indietro nella stessa linea? Lasciami spiegare cosa intendo. Ecco un esempio di codice:

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

Sto cercando se c'è qualche soluzione alternativa in modo che la dichiarazione sopra possa stampare 0,1,2,3,4,3,2,1,0?

java 

Risposte:


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

2

Puoi anche dare un'occhiata:

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

produzione :

0 1 2 3 4 3 2 1 0

2

Tutta la logica in una riga come richiesto dall'OP

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

1
Questa risposta è fantastica e più generica rispetto al resto (+1) - puoi sostituire 0 e 4 nelle condizioni del ciclo per argomenti di funzione come min e max e quindi è molto generica! 👏
Alex L

1

Con un po 'di aritmetica, puoi:

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

Ma semplicemente usare due forloop è più facile da scrivere e leggere.


1

Ecco qui

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

Produzione:

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

Non esiste un modo davvero semplice per farlo, ma con alcune modifiche puoi finire con un ciclo che può cambiare direzione:

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 (generico, non deve essere compreso tra 0 e 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);

In JavaScipt (solo così puoi vedere la demo live):

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

Una linea generica, tutta la logica è nelle forespressioni.

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+ " ");
       }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.