迴圈與習慣

當你用了很久的for迴圈,某天卻要用while迴圈,你是否也有這樣的經驗?

心理想著for迴圈
for (int x=0;x<100;++x) {
 for (int y=0;y<50;++y) {
  // processing....
 }
}
寫出的while是
int x=0,y=0;
while (x<100) {
 while (y<50) {
  // processing....
  ++y;
 }
 ++x;
}
結果是錯的!

這是由於內部迴圈所使用的y變數,只有在整個迴圈的一開始作初始化的動作(歸零),因此內部迴圈只會作一次,之後不管外部迴圈跑幾次,它都不會再作內部迴圈。

正確的寫法是
int x=0;
while (x<100) {
 int y=0;
 while (y<50) {
  // processing....
  ++y;
 }
 ++x;
}


在程式主體必需要高度集中思考與大量程式碼的掩飾下,很容易就以為程式是在運算中出錯,而不是迴圈設定上,若是陷在這種基礎的思考中而不自知,會花費相當多的時間在debug,而且找到以後還會碎碎念:迴圈也會寫錯,還花這麼多時間。

2008-01-28 添加正確的迴圈寫法

留言