Java에서 for 루프를 1이 아닌 증분으로 늘리는 방법


82

다음과 같은 for 루프가있는 경우 :

for(j = 0; j<=90; j++){}

잘 작동합니다. 그러나 다음과 같은 for 루프가있을 때 :

for(j = 0; j<=90; j+3){}

작동하지 않습니다. 누군가 나에게 이것을 설명해 주시겠습니까?


17
여기에서 질문하기 전에 먼저 직접 시도해 보면 +1.
Falmarri 2011 년

1
부작용 j++은? 부작용 j+3은?

답변:


119

j+3의 값을 변경하지 않기 때문 입니다 j. 당신과 그를 교체해야 j = j + 3하거나 j += 3그래서 값 j3으로 증가 :

for (j = 0; j <= 90; j += 3) { }

2
다른 방법으로 그는 수 int j=0; for(;j<=90;){... j+=3;}있지만이 자명하지입니다;)
jcolebrand

6
@drachenstern 즉, while 루프입니다.
dkarp 2011 년

@dkarp ~ 사실,하지만 대부분의 사람들이 그 구문에 대해 어떻게 생각하지 않는지 보면 내가 지적 할 것이라고 생각했습니다. 특히 OP는 분명히 어린 나이에 Java와 프로그래밍을 배우고 있기 때문에 (profee 및 링크 된 블로그를 확인하십시오). 그 나이에 그렇게 했더라면 좋았을 텐데.
jcolebrand 2011 년

44

아무도 실제로 태클하지 않았으므로 Could someone please explain this to me?나는 다음과 같이 할 것이라고 믿습니다.

j++ 속기, 실제 작업이 아닙니다 (정말 그렇습니다. 설명을 위해 저와 함께하십시오)

j++j = j + 1;매크로 나 인라인 교체를 수행하는 것이 아니라는 점을 제외 하면 작업과 실제로 동일합니다 . 의 작동 i+++++i과 그 의미 에 대해 여기에서 많은 논의가 있습니다 ( i++ + ++iOR 로 해석 될 수 있기 때문에(i++)++ + i

그 결과 : i++++i. 그들은post-incrementpre-increment연산자 . 왜 그렇게 명명되었는지 짐작할 수 있습니까? 중요한 부분은 과제에서 어떻게 사용되는지입니다. 예를 들어 다음과 같이 할 수 있습니다. j=i++;또는 j=++i;이제 예제 실험을 수행합니다.

// declare them all with the same value, for clarity and debug flow purposes ;)
int i = 0;
int j = 0;
int k = 0;

// yes we could have already set the value to 5 before, but I chose not to.
i = 5;

j = i++;
k = ++i;

print(i, j, k); 
//pretend this command prints them out nicely 
//to the console screen or something, it's an example

i, j, k의 값은 무엇입니까?

나는 당신에게 대답을주고 당신이 그것을 해결하도록 할 것입니다.)

i = 7, j = 5, k = 7;이것이 사전 및 사후 증분 연산자의 힘이며 잘못 사용하면 위험합니다. 그러나 다음은 동일한 작업 순서를 작성하는 다른 방법입니다.

// declare them all with the same value, for clarity and debug flow purposes ;)
int i = 0;
int j = 0;
int k = 0;

// yes we could have already set the value to 5 before, but I chose not to.
i = 5;

j = i;
i = i + 1; //post-increment

i = i + 1; //pre-increment
k = i;

print(i, j, k); 
//pretend this command prints them out nicely 
//to the console screen or something, it's an example

좋아, 이제 ++연산자가 어떻게 작동 하는지 보여 주 었으니, 왜 작동하지 않는지 살펴 보자. j+3이전에 "속기"라고 불렀던 기억 나? 그게 전부입니다. 두 번째 예제를 보십시오. 컴파일러가 명령을 사용하기 전에 효과적으로 수행 하는 작업 이기 때문입니다 (그것보다 더 복잡하지만 첫 번째 설명은 아닙니다). 따라서 "확장 된 속기"에 i =AND i + 1가 있고 요청에 포함 된 모든 것이 표시됩니다.

이것은 수학으로 돌아갑니다. 함수는 어디에 f(x) = mx + b또는 방정식으로 정의 y = mx + b되므로 우리가 무엇이라고 부르는가 mx + b... 확실히 함수 나 방정식이 아닙니다. 기껏해야 표현입니다. 그게 전부 j+3입니다. 할당이없는 표현식은 우리에게 좋지 않지만 CPU 시간을 차지합니다 (컴파일러가이를 최적화하지 않는다고 가정).


이 정보가 여러분에게 명확하고 새로운 질문을 할 수있는 여지를 제공하기를 바랍니다. 건배!


9

귀하의 예에서 j+=3 3 씩 증가합니다.

(여기에서 말할 것도 많지 않습니다. 구문과 관련된 경우 먼저 인터넷 검색을 제안하지만 여기에 새로 왔기 때문에 틀릴 수 있습니다.)


3
당신 말이 맞아,하지만 원래의 질문이 j+3있는 하지 않습니다 실제로 증가 j. OP는 j += 3.
Greg Hewgill 2011 년

8
for(j = 0; j<=90; j = j+3)
{

}

j+3j에 새 값을 할당하지 않고 add j=j+3는 j에 새 값을 할당하고 루프는 3만큼 위로 이동합니다.

j++을 말하는 것과 같으므로이 j = j+1경우 위와 같이 j에 새 값을 할당합니다.



4

이럴거야

for(int j = 0; j<=90; j += 3) 

하지만 조심해

for(int j = 0; j<=90; j =+ 3) 

또는

for(int j = 0; j<=90; j = j + 3)

2

간단히 시도하십시오

for(int i=0; i<5; i=i+2){//value increased by 2
//body
}

또는

for(int i=0; i<5; i+=2){//value increased by 2
//body
}

1

코드를 다음과 같이 작성할 수도 있습니다.

for(int i=0;i<n;i++)
{
      //statements;
      i=i+2;//cause you want to increment i by 3 
}

1
for(j = 0; j<=90; j++){}

j ++는 j = j + 1, j 값은 이미 0을 의미합니다. 이제 1을 더하고 있으므로 j + 1의 합계 값이 1이되었습니다. 마지막으로 j 값 (0)을 합계 값 (1)으로 덮어 씁니다. j 값을 j + 1로 재정의합니다. 따라서 각 반복 j 값은 1 씩 증가합니다.

for(j = 0; j<=90; j+3){}

여기서 j + 3은 j 값이 이미 0임을 의미합니다. 이제 3을 더하고 있으므로 j + 3의 합계 값은 3이되었지만 기존 j 값을 재정의하지 않습니다. 따라서 JVM이 프로그래머에게 요청하면 새 값을 계산하지만 해당 값을 변수 (예 : j)에 할당합니다. 이것이 컴파일 타임 오류 "invalid AssignmentOperator"가 발생하는 이유입니다.

j 값을 3 씩 늘리려면 다음 방법 중 하나를 사용할 수 있습니다.

 for (int j=0; j<=90; j+=3)  --> here each iteration j value will be incremented by 3.
 for (int j=0; j<=90; j=j+3) --> here each iteration j value will be incremented by 3.  

0

루프 문의 "증가"부분은 인덱스 변수의 값을 변경해야합니다. "++ j"의 긴 형식은 "j = j + 1"입니다. 따라서 다른 답변에서 말했듯이 증분의 올바른 형태는 "j = j + 3"이며, 1 씩 증분하는 것만 큼 간결하지 않습니다. 아시다시피 "j + 3"은 실제로 j를 변경하지 않습니다. 평가가 효과가없는 식입니다.


0

다음과 같은 for 루프가있는 경우 :

for(j = 0; j<=90; j++){}

이 루프에서는 j = j + 1에 해당하는 접미사 연산자 (use-then-change)를 의미하는 Java 언어에서 제공하는 속기를 사용하고 있으므로 변경된 값이 초기화되어 다음 작업에 사용됩니다.

for(j = 0; j<=90; j+3){}

이 루프에서는 값을 3만큼 증가시키고 j 변수로 다시 초기화하지 않으므로 j 값은 변경된 상태로 유지됩니다.



0
for (let i = 0; i <= value; i+=n) { // increments by n
/*code statement*/
}

이 형식은 색인을 n만큼 증가시키는 데 적합합니다.

for (let i = 0; i <= value; i+=4) { // increments by 4
/*code statement*/
}

n = 4이면 4 씩 증가합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.