<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 42, comments - 7, trackbacks - 0, articles - 1

    for 循環與while循環的等價

    Posted on 2007-10-29 19:56 TuringJava 閱讀(642) 評論(0)  編輯  收藏 所屬分類: J2SE

    在進行for循環和while循環的等價轉換的時候,要注意到循環條件的順序。下面的分析說明了這一點:

    插入排序的for循環版本:
     insertSort(int[] array) {
      int key;
      int i,j;
      /*for 循環*/
      for(i = 1; i < array.length; i++ )
            {
                key = array[i];
                for(j = i; j > 0 && key < array[j - 1]; j--)
                    array[j] = array[j - 1];

                array[j] = key;
            }
    }

    下面程序片段是插入排序的while循環版本:
    insertSort(int[] array) {
      int key;
      int i,j;
        /*用while循環*/
       for (i = 1; i < array.length; i++) {
       key = array[i];//當前的要進行插入的數值
       j = i;
       while( array[j -1] > key && j >0) 
        {   
        array[j] = array[j-1];
        j--;
         }

       array[j] = key;
      }
     }

    初看這兩個程序片段的時候,似乎是等價。但是編譯執行的時候,for循環的版本可以通過,而while循環的版本卻報出數組越界的錯誤。分析了好久,也沒搞明白原因。最后,對程序進行調試后才發現了其中的錯誤。正確的while循環應該是這樣的:
    while( j>0 && array[j-1] > key){   
        array[j] = array[j-1];
        j--;
       }

    對比兩個while循環,相當的類似,其細微的區別僅在于while循環條件的順序不一樣,錯誤的while循環條件是:
     array[j -1] > key && j >0…………1
    正確的是:
    j>0 && array[j-1] > key……………2
    這就涉及到了while循環條件表達式的執行順序。如果當j=0時候,表達式1取出array[j-1]時,j-1=-1,數組越界了。而表達式2先對j進行判斷就排除了j=0的可能性。

    該錯誤表明了,在構造while循環的判斷表達式的時候,對循環條件的考慮要周全,同時也說明了一點,在進行條件與(&&)操作時候,如果第一個條件是flase,其后的條件就不必要進行判斷了。
    貌似簡單的一個道理,在我們編程的過程中,經常會被遺忘。
    主站蜘蛛池模板: 在线观看亚洲AV日韩AV| 亚洲人成网站在线观看播放动漫 | 亚洲高清无在码在线无弹窗| 国产黄色片免费看| 亚洲国产精品一区二区三区久久| 亚洲国产精华液2020| 日韩免费电影在线观看| 毛片亚洲AV无码精品国产午夜| 永久免费毛片手机版在线看| 亚洲av永久无码精品秋霞电影秋 | 久久久久久曰本AV免费免费| 亚洲图片一区二区| 久久国产免费观看精品3| 亚洲视频欧洲视频| 黄页网站免费在线观看| 亚洲精品无码久久久久久| 国产精品成人免费综合| 美女视频黄.免费网址 | 久久久久免费看黄a级试看| 亚洲国产精品久久久久| 亚洲免费在线视频观看| 亚洲中文字幕无码中文| 免费人成网站7777视频| 久久国产美女免费观看精品 | 日韩国产欧美亚洲v片| 日韩精品成人亚洲专区| 一区在线免费观看| 老汉色老汉首页a亚洲| 99爱在线精品免费观看| 国产精品亚洲精品久久精品 | 亚洲精品视频久久| 成人午夜免费福利| 一个人看的www免费在线视频| 久久亚洲AV午夜福利精品一区| 黄色网址免费观看| 免费看一级一级人妻片| 亚洲精品无码不卡| 国产资源免费观看| 国产成人无码区免费内射一片色欲| 亚洲熟妇av一区| 国产精品免费视频网站|