Lingkari depan dan belakang dalam satu baris


11

Saya pikir ini adalah pertanyaan yang menarik. Kita dapat mengulang dalam satu cara tetapi bisakah kita mengulanginya ke belakang di baris yang sama? Izinkan saya menjelaskan apa yang saya maksud. Berikut ini contoh kode:

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

Saya mencari apakah ada solusi sehingga pernyataan di atas dapat dicetak 0,1,2,3,4,3,2,1,0?

java 

Jawaban:


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

2

Anda juga dapat melihat ini:

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

keluaran:

0 1 2 3 4 3 2 1 0

2

Semua logika dalam satu baris seperti yang diminta OP

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

1
Jawaban ini luar biasa dan lebih umum daripada yang lainnya (+1) - Anda dapat mengganti 0 dan 4 dalam kondisi loop untuk argumen fungsi seperti min dan max dan kemudian sangat generik! 👏
Alex L

1

Dengan sedikit aritmatika, Anda dapat:

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

Tetapi hanya dengan menggunakan dua forloop lebih mudah untuk menulis dan membaca.


1

Ini dia

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

Keluaran:

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

Tidak ada cara yang sangat sederhana untuk melakukan ini, tetapi dengan beberapa modifikasi Anda bisa berakhir dengan satu loop yang dapat mengubah arah:

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

0

Di Jawa (generik, tidak harus antara 0 dan 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);

Di JavaScipt (supaya Anda bisa melihat demo langsung):

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

Satu liner generik, semua logika ada dalam forekspresi.

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+ " ");
       }
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.