2013-04-17 57 views
-1

考虑以下代码:工作在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的值作为IF条件正在逐步成为现实正在发生变化。但f的值总是为零。当条件为真时,应该改变为z的值。当它离开最后一个循环并继续顶部循环时,z的值只能为零。

任何人都请告诉我这段代码有什么问题?我是否运用了一些错误的逻辑?

更新:

家伙问题就解决了一切工作正常。只是我无法清楚地看到它。我在控制台上显示每个变量的值(f和z的值),我看到它的工作正常。为此道歉。

+1

我建议在'双上一页= 0把断点(按F9); ...'线和步进通过代码逐行(F10)。 –

+2

你用调试器检查了'f = z;'这行是否被命中?我的意思是 - 你是否在任何时候检查了条件是否为“真”? –

+0

谢谢@GeorgeDuckett请参阅我的更新问题 –

回答

4

当它离开最后一个循环时,z的值只能为零,并且 继续顶部循环。

没有,z值将在内部进行循环的第一次迭代0,如果第一次迭代中满足条件则f将被分配0并能持续0直到休息。或者,如果条件永远都无法满足那么f将保持其原值这又是0