2012-02-07 208 views
0

傢伙,我有一個很奇怪的問題。我試圖實現一個嵌套的for循環其將一個矩形成更小的塊,然後進行檢查以查看這些更小的塊的具有點從i已經在他們定義的陣列(大矩形是320 * 240順便說一句):嵌套for循環遍歷不正確

 int[,] edgetrunc = new int[edgeIndex, 2]; //edgeIndex is the number of points in the external array 
     Array.Copy(edgePoint, edgetrunc, edgeIndex*2);//truncates the nulls from the tail of my array 
     int delx = 16;//width of block 
     int dely = 12;//height of block 

     int blockIndex = new int(); 
     bool[] block = new bool[(depthFrame.Width/delx)*(depthFrame.Height/dely)]; 

     for (int ymin = 0;ymin < depthFrame.Height;ymin += dely) 
     { 
      for (int xmin = 0; xmin < depthFrame.Width; xmin += delx) 
      { 
       blockIndex = (xmin/delx) + (ymin/dely); 
       for (int i = 0; i < edgeIndex; i++) 
       { 
        if (edgetrunc[i, 0] >= xmin && edgetrunc[i, 0] < xmin++ && edgetrunc[i, 1] >= ymin && edgetrunc[i, 1] < ymin++) 
        { 
         block[blockIndex] = true; 
         break; 
        } 
       } 
      } 
     } 

繼承人問題雖然,我把第二個for循環(xmin循環)的斷點,並開始迭代它,並在第一次迭代時xmin的值從0跳到320,然後停留在那裏和每個迭代都會改變ymin。我要去克雷?我做錯了什麼?

PS我甚至測試這一點,我得到了同樣的問題:

for (int ymin = 0;ymin < depthFrame.Height;ymin += dely) 
    { 
     for (int xmin = 0; xmin < depthFrame.Width; xmin += delx) 
     { 

     } 
    } 

編輯:

想通了,很奇怪,apparantly它與我試圖找到方法來做到塊索引。爲了解決這個問題,我初始化blockIndex爲0以外的for循環,把blockIndex ++第三次for循環後,感謝您的幫助反正=)

 int blockIndex = 0; 
     bool[] block = new bool[(depthFrame.Width/delx)*(depthFrame.Height/dely)]; 

     for (int ymin = 0;ymin < depthFrame.Height;ymin += dely) 
     { 
      for (int xmin = 0; xmin < depthFrame.Width; xmin += delx) 
      { 
       for (int i = 0; i < edgeIndex; i++) 
       { 
        if ((edgetrunc[i, 0] >= xmin) && (edgetrunc[i, 0] < (xmin + delx)) && (edgetrunc[i, 1] >= ymin) && (edgetrunc[i, 1] < (ymin + dely))) 
        { 
         block[blockIndex] = true; 
         break; 
        } 
       } 
       blockIndex++; 
      } 
     } 

回答

2

而不是使用XMIN ++和ymin ++我想你可能是指使用XMIN +1和ymin + 1。 ++會改變變量的值。

+0

,不幸的是沒有工作,請參閱我的問題的更新。 – 2012-02-07 06:36:33

0

關於第一個內循環迭代,下面獲取運行:

xmin++ 

爲最內層循環的if語句的一部分。這得到執行320次,因此你的價值。其中第二次迭代,

edgetrunc[i, 0] >= xmin 

將是錯誤的,所以xmin++線將不被執行。一般來說,你應該避免在if語句中使用像xmin++這樣的突變語句。重構,看看它是否修復你的問題

+0

我試過,但問題仍然存在=(我這樣完全失去了。我甚至註釋掉第三個環,如圖我編輯的問題,它仍然螺絲了。 – 2012-02-07 06:16:50

0

它跳起來的原因是因爲你的內部循環中的if語句中有xmin++

這可能很容易將xmin的值快速提高,具體取決於edgeIndex的值。

x++增量x然後使用其舊值。我認爲你需要的僅僅是x+1,它使用值加1,而不改變值。

同上,用於在那裏ymin++爲好。

換句話說,它可能應該是:

if (edgetrunc[i, 0] >= xmin && edgetrunc[i, 0] < xmin + 1 && 
    edgetrunc[i, 1] >= ymin && edgetrunc[i, 1] < ymin + 1)