2013-04-17 3 views
-1

위한 중첩 된 다음 IF 조건이 참이되고있다으로 작업은 IF 문에이 코드를 고려

int f=0; 
for(......) 
{ 
    .......... 
    .......... 
    //some code that does not alter f and z 
    .......... 
    .......... 
    double prev = 0; int z = 0; int y = 0; 
    for (int x = 0; x < c.timesteps; x++) 
    { 

     for (z=0; z < outs[i].campaigns.ToArray().Length; z++) 
     { 
      if (x == (outs[i].outage_dates[outs[i].campaigns[z]] * 7)) 
      { 
       f = z; 
       break; 
      } 
     } 
     Console.WriteLine("\nF=" + f); 
     Console.Read(); 
     for (y = f; y < outs[i].campaigns.ToArray().Length; y++) 
     { 
      ............. 

      ............. 

      ............. 
     } 
    } 
} 

내가 그것을 실행

는 Z의 값은 변화하고있다. 그러나 f의 값은 항상 0입니다. 조건이 참일 때 z의 값으로 변경해야합니다. z의 값은 마지막 루프를 떠나고 최상위 루프를 계속할 때만 0이 될 수 있습니다.

누구든지이 코드가 잘못되었습니다. 잘못된 논리를 적용하고 있습니까?

업데이트 :

얘들 문제가 해결되고 모든 것이 잘 작동했다. 그냥 분명히 볼 수 없었습니다. 나는 각 변수의 값을 콘솔 (f와 z의 값)에 표시했다. 그것을위한 사과.

+1

이전 값을 유지합니다. 이중 사전 = 0; ...'줄에 중단 점 (F9 키 누름)을 배치하고 코드를 단계별로 실행하는 것이 좋습니다. 한 줄씩 (F10). –

+2

'f = z;'행에 적중 한 적이 있는지 디버거로 확인 했습니까? 제 말은 ... 언제든지 그 조건이 '사실'인지 확인 했습니까? –

+0

감사합니다. @GeorgeDuckett 내 업데이트 된 질문을 참조하십시오. –

답변

4

z의 값은 마지막 루프를 떠날 때만 0 일 수 있으며 은 최상위 루프를 계속합니다.

없음

, z의 값은 루프 내부의 첫 번째 반복에서 0 될 것이며, 첫 번째 반복 동안 조건이 다음 충족되는 경우 f0를 할당하고 그 나머지까지 0을 유지합니다. 또는 조건이 충족되지 않으면 다시 0