Vòng lặp trước và sau trong một dòng


11

Tôi nghĩ rằng đây là một câu hỏi thú vị. Chúng ta có thể lặp theo một cách nhưng chúng ta có thể lặp nó ngược lại trong cùng một dòng không? Hãy để tôi giải thích những gì tôi có ý nghĩa. Đây là một mã ví dụ:

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

Tôi đang tìm kiếm nếu có bất kỳ cách giải quyết khác để tuyên bố trên có thể in 0,1,2,3,4,3,2,1,0?

java 

Câu trả lời:


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

2

Bạn cũng có thể kiểm tra điều này:

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

đầu ra:

0 1 2 3 4 3 2 1 0

2

Tất cả logic trong một dòng như OP yêu cầu

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

1
Câu trả lời này tuyệt vời và chung chung hơn phần còn lại (+1) - bạn có thể thay thế 0 và 4 trong các điều kiện vòng lặp cho các đối số hàm như min và max và sau đó rất chung chung! 👏
Alex L

1

Với một chút số học, bạn có thể:

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

Nhưng chỉ cần sử dụng hai forvòng lặp là dễ dàng hơn để viết và đọc.


1

Bạn đi đây

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

Đầu ra:

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

Không có cách nào thực sự đơn giản để làm điều này, nhưng với một vài sửa đổi, bạn có thể kết thúc bằng một vòng lặp có thể thay đổi hướng:

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

0

Trong Java (chung chung, không phải nằm trong khoảng từ 0 đến 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);

Trong JavaScipt (để bạn có thể xem bản demo trực tiếp):

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

Một lót chung, tất cả logic là trong các forbiểu thức.

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+ " ");
       }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.