2013-10-11 3 views
-1

나는 아래의 코드에서 감소 연산자 (e--) 이 어떻게 작동하는지 파악할 수 없었으므로 동일한 결과를 얻으려면 아래 다른 클래스를 작성했습니다. 감속 연산자 이 어떻게 Power 클래스에서 그 결과를 얻는 지 알고 싶습니다. - 새내기.은 for 루프에 중첩되어 있습니다. 감소 연산자는 어떻게 작동합니까?

int result, e; 
for(int i=0; i < 10; i++) { 
    result = 1; 
    e = i; 
    while(e > 0) { 
    result *= 2; 
    e--; 
    } 

    System.out.println("2 to the " + i + 
        " power is " + result);   
} 

코드 루프의 주요 각 반복에 대해 동일한 결과를

int result = 1; 

for(int i=0; i < 10; i++) { 


    if (i > 0) { 
    result*=2; 

    } 
    System.out.println("2 to the " + i + 
        " power is " + result); 

}      
+0

"Power class"= 첫 번째 코드는 이해하기가 어려움 – user2869580

+0

몇 가지 작은 예제를 작성하면 도움이 될 것입니다. –

+1

진짜 질문을하면 도움이 될 것입니다. 정확히 당신이 이해하지 못하는 것은 무엇입니까? 프로그래머가 아마 C를하기 때문에 (위와 같이하는 것이 C에서 더 빠름) 위의 스 니펫에서'e'가 감소합니다. 그것은 기본적으로'result'' e times times – thriqon

답변

0

따라서 첫 번째 예는 리셋되는 결과를 얻기 위해 기록하므로 두 번째로, 여기서 처음부터 매번 계산해야 예는 이전에 계산 된 값을 유지하는 것입니다. 두 번째 예제의 if는 필요하지 않습니다.

+0

if에 대한 응답의 첫 번째 println 문을 0으로 설정하려면 if가 필요합니다. 우리는 코드가 쓰여지는 방식으로 2 제로 곱하기를 할 수 없다. 그 부분은 건너 뛴다. 나머지는 result * = 2;로 끝납니다. 미리 감사드립니다. – user2869580

0

감소 연산자는 호출 된 변수를 수정합니다. 따라서 e--은 실질적으로 e = e - 1입니다 (표현의 전체적인 결과가 다르다는 것을 제외하고는 아래를보십시오).

이 코드 : 다음

result = 1; 
e = i; 
while(e > 0) { 
    result *= 2; 
    e--; 
} 

result = 1으로 시작되고 result의 값을 두 배로 i 반복 루프를.

result = 1; 
for (e = 0; e < i; e++) { 
    result *= 2; 
} 

이 감소 (그리고 증가) 연산자의 두 가지 형태가 있습니다 : 당신이 더 편안 것 for를 사용하여 상응하는 코드 운영자가 전 (접두사)인지 접두사후위에 따라이 나 피연산자 뒤에 (후위). 유일한 차이점은 표현의 결과이기 때문에 여러분이 묻는 코드에서 어느 것이 든 사용될 수 있습니다.

접두어 : x = 5이라고 가정합니다. 표현 --x의 값은 4입니다. 먼저 x을 감소시키고 표현식의 결과로 새 값을 가져옵니다.

접미어 : x = 5 (다시)이라고 가정합니다. 식 x--x4 함유 끝나는으로 값 5 있습니다 우선 우리가 식의 결과 x의 현재의 값을 잡고, 우리합니다 (--x 때문)를 감소.

int x, r; 

x = 5; 
r = --x; // Prefix 
System.out.println("r = " + r + ", x = " + x); // "r = 4, x = 4" 

x = 5; 
r = x--; // Postfix 
System.out.println("r = " + r + ", x = " + x); // "r = 5, x = 4" 
+0

두 코드는 첫 번째 코드에서 e - bit없이 i = 0에서 i = 9까지 일련의 println 문의 동일한 결과를 생성하지만이 결과를 얻지 못합니다. 나는 이것을 이해하고 싶다. 또한 postfix-prefix를 이해합니다. 그 어쩌면 의문의 여지가있는 이해는 내 자신의 대답을 이해하는 데 도움이되지 않는다. 왜 e - 제곱 결과가 그 가치를 유지하는지에 대한 대답. 반면 e는 iterating i의 값을 취하고 왜 감소합니까? 나는 내 질문이 어리 석다는 생각에 빠져 들었다. 나는 이것을 이해하기를 아주 좋아합니다. 감사. – user2869580

+0

@ user2869580 : 첫 번째 코드는 매번 결과를 다시 계산합니다. 두 번째 코드 스 니펫은 이전 결과를 유지합니다. 첫 번째 스 니펫에서 'e'는 루프 제어 이외의 결과 계산과 아무런 관련이 없습니다. 결과는 반복되는'result * = 2'에 의해 주로 계산됩니다. 각 반복 루프에서'result'에 저장된 값을 두 배로 늘립니다. –

0

이 난에서 System.out.println (E)을 배치하여 내가 감소의 의미를 위해 변수 "E"동작 "볼"수 알아낼.

class Power { 
public static void main(String args[]) { 
    int e; 
    int result; 

    for(int i=0; i < 10; i++) { 
    result =1 ; 
    e = i; 

    while(e > 0) { 
    System.out.println(e); // not part of the original program 
    result *= 2 ;    
    e--; 
    System.out.println(e); // not part of the original program 

}

//System.out.println("2 to the " + i +    
       //" power is " + result);  

}는

이 출력이다

C : \ 사용자 \ 리크 \ 화상 \ Hello.java> 자바 파워 1, 0, 2 1, 1, 0, 3

e = 1 (반복 1), 2^1, e (1)을 0으로 감소시키고, e = 2 (반복 2), 2^2, e (2) 1, e = 1 re - while 2^1이 이미 등록되었으므로 무시되지만, e (1)은 0, e = 3 (반복 3), 2^3 ...

관련 문제