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.

java 

Respuestas:


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

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

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

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.


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 

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

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

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


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+ " ");
       }
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.