한 줄에 앞뒤로 루프


11

이것이 흥미로운 질문이라고 생각합니다. 우리는 한 가지 방식으로 반복 할 수 있지만 같은 줄에서 뒤로 반복 할 수 있습니까? 무슨 뜻인지 설명하겠습니다. 예제 코드는 다음과 같습니다.

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

위의 내용을 인쇄 할 수있는 해결 방법이 있는지 찾고 0,1,2,3,4,3,2,1,0있습니까?

java 

답변:


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

2

당신은 또한 이것을 확인할 수 있습니다 :

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

출력 :

0 1 2 3 4 3 2 1 0

2

OP가 요청한대로 한 줄의 모든 논리

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

1
이 답변은 나머지 (+1)보다 훌륭하고 일반적입니다. min 및 max와 같은 함수 인수의 루프 조건에서 0과 4를 대체 할 수 있습니다. 👏
Alex L

1

약간의 산술로 다음을 수행 할 수 있습니다.

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

그러나 단순히 두 개의 for루프 를 사용 하면 쓰기와 읽기가 더 쉽습니다.


1

여기 요

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

산출:

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

이 작업을 수행하는 간단한 방법은 없지만 몇 가지 수정으로 방향을 변경할 수있는 루프가 생길 수 있습니다.

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

0

Java에서 (일반, 0과 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);

JavaScipt에서 (실시간 데모를 볼 수 있도록) :

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

일반적인 하나의 라이너, 모든 논리는 for표현식에 있습니다.

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+ " ");
       }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.