2012-07-29 96 views
-4

爲什麼此代碼不運行?對於循環和邏輯AND +或

for(int i=0;i<11;i++){ 
    for(int j=0;j<11;j++){ 

     if(i>0){ 
      if((staticWallLoc[i--][j]&4)>0){staticWallLoc[i][j]=staticWallLoc[i][j]|1;} 
     } 
     if(j<10){ 
      if((staticWallLoc[i][j++]&8)>0){staticWallLoc[i][j]=staticWallLoc[i][j]|2;} 
     } 
     if(i<10){ 
      if((staticWallLoc[i++][j]&1)>0){staticWallLoc[i][j]=staticWallLoc[i][j]|4;} 
     } 
     if(j>0){ 
      if((staticWallLoc[i][j--]&2)>0){staticWallLoc[i][j]=staticWallLoc[i][j]|8;} 
     } 

     System.out.println(i+" "+j); 
    } 
} 

順便說一句,staticWallLoc [11] [11]是一個二維數組,每個維度(0-10)有11個索引。

只是想知道爲什麼我的程序字面無法通過此代碼。

+5

每次我看到這樣的問題,我感到困惑,一個非常好的主意。你有沒有嘗試過使用調試器? – 2012-07-29 23:13:09

+2

那些後循環索引的增量和減量是可怕的!只需使用i-1和i + 1等作爲索引。 – John3136 2012-07-29 23:15:03

+0

@ John3136我想你只是回答了這個問題;) – MadProgrammer 2012-07-29 23:16:27

回答

1

裏面你if(i > 0)istaticWallLoc[i--]遞減。將其更改爲staticWallLoc[i-1],並對j執行相同操作。

if(i>0){ 
    // Try something like this instead 
    if((staticWallLoc[i-1][j]&4)>0){ 
     staticWallLoc[i][j]=staticWallLoc[i][j]|1; 
    } 
} 

你也想改變你的[i++][i+1]

+0

謝謝,我犯了一個非常愚蠢的錯誤,我只是習慣於使用 - 和++,我是第一次編程,所以這些愚蠢的錯誤很少,但是,我仍然讓他們! XD 謝謝! – 2012-07-31 02:06:09

+0

沒問題。這些錯誤提供了寶貴的經驗。現在當你閱讀一本理論書的時候,你至少會有這個難忘的機會能夠更好地理解各種編程實踐背後的原因等等。 – 2012-07-31 05:03:17

2

Dude - 你爲什麼要在循環體中遞減你用來控制循環計數器的相同變量?!?

聽起來像「前進一步,後退兩步」,不是嗎?)?

建議:

運行調試器,經過幾次反覆一步,並仔細注意發生了什麼「i」和「J」。

你認爲兩者中的哪一個或兩者達到「11」;)?

+0

+1,這是一些混亂的代碼。 – 2012-07-29 23:14:53

0

在你的循環中,你有像if (i>0) {staticWallLoc[i--][j]...這樣的語句。這些直接改變了循環索引。所以,當i1時,它被改回到0。當循環遞增時,它會回到1,然後再次0,創建一個無限循環。

您是否想要使用staticWallLoc[i - 1][j]...等?這可以在不改變循環索引的情況下獲得所需的索引

0

而不是在你的代碼中使用i ++ i--等,只是使用偏移量i-1或i + 1。

一般經驗法則:在for循環中,不要混淆正文中的for循環變量。

(也有例外的規則,但是這並不像一個特例)

0

不知道究竟發生了什麼你的數組的內容是很難說的。可能是因爲你正在用--++修改i和j的值?你的意思是要保持這些值恆定,做這樣的事情:

if((staticWallLoc[i+1][j]&1)>0){staticWallLoc[i][j]=staticWallLoc[i][j]|4;} // changed i++ to i+1 
0

一旦j達到10,它不會在「if(j < 10)」部分增加,但會在「if(j> 0)」部分遞減,所以j將循環結束於9 ,然後通過循環管理增加到10。所以你將有一個無限循環,i = -1/0(因爲它在循環中遞減和遞增)和j = 9/10(出於同樣的原因)。

0

如果j> = 10,你最後做一個j--。循環將停留在j == 10。

這不是操縱循環變量:)