Bir satırda ön ve arka döngü


11

Bence bu ilginç bir soru. Bir şekilde döngü yapabiliriz, ancak aynı çizgide geriye doğru döngü yapabilir miyiz? Ne demek istediğimi açıklayayım. İşte bir örnek kod:

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

Yukarıdaki ifade yazdırmak için herhangi bir geçici çözüm olup olmadığını arıyorum 0,1,2,3,4,3,2,1,0?

java 

Yanıtlar:


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

2

Ayrıca şunu da kontrol edebilirsiniz:

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

çıktı :

0 1 2 3 4 3 2 1 0

2

OP'nin sorduğu gibi bir satırdaki tüm mantık

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

1
Bu cevap harika ve diğerlerinden daha genel (+1) - min ve max gibi işlev argümanları için döngü koşullarında 0 ve 4'ü ve daha sonra onun genelini değiştirebilirsiniz! 👏
Alex L

1

Biraz aritmetik ile şunları yapabilirsiniz:

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

Ancak sadece iki fordöngü kullanmak , yazmak ve okumak daha kolaydır.


1

Hadi bakalım

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

Çıktı:

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

Bunu yapmanın gerçekten basit bir yolu yoktur, ancak birkaç değişiklikle yön değiştirebilecek bir döngü elde edebilirsiniz:

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

0

Java'da (genel, 0 ile N arasında olmak zorunda değildir):

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

JavaScipt'te (canlı demoyu görebilmeniz için):

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

Genel bir astar, tüm mantık forifadelerdedir.

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+ " ");
       }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.