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?


sumber

Jawaban:

14
for (int i = -4; i <= 4; i++) {
    System.out.println(4 - Math.abs(i));
}
kan
sumber
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
Warga kehormatan
sumber
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 +" ");
  }
Ken
sumber
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.

Thomas
sumber
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 
Arvind Kumar Avinash
sumber
1
for(int i = 0; i < 9; i++){
     int j = i;
     if(i >= 5)
         j = 8 - i;
     System.out.println(j);
}
Delphi1024
sumber
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);
QuantumDeveloper
sumber
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; }

Alex L
sumber
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+ " ");
       }
Ken
sumber