Lazo delantero y trasero en una línea

11

Creo que esta es una pregunta interesante. Podemos hacer un bucle de una manera, pero ¿podemos hacerlo hacia atrás en la misma línea? Déjame explicarte lo que quiero decir. Aquí hay un código de ejemplo:

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

Estoy buscando si hay alguna solución para que se pueda imprimir la declaración anterior 0,1,2,3,4,3,2,1,0.


fuente

Respuestas:

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

También puedes ver esto:

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

salida:

0 1 2 3 4 3 2 1 0
Hombre libre
fuente
2

Toda la lógica en una línea como el OP preguntó

  for(int i=0, d=1; i>=0 ;d=(i==4?-1:d), i+=d){
    System.out.print(i +" ");
  }
Conocer
fuente
1
Esta respuesta es increíble y más genérica que el resto (+1): puede reemplazar 0 y 4 en las condiciones de bucle para argumentos de función como min y max y luego es muy genérico. 👏
Alex L
1

Con un poco de aritmética, puedes:

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

Pero simplemente usar dos forbucles es más fácil de escribir y leer.

Thomas
fuente
1

Aqui tienes

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

Salida:

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

No existe una forma realmente simple de hacerlo, pero con algunas modificaciones puede terminar con un bucle que puede cambiar de dirección:

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

En Java (genérico, no tiene que estar entre 0 y 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);

En JavaScipt (solo para que pueda ver la demostración en vivo):

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
fuente
0

Un genérico, toda la lógica está en las forexpresiones.

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