0

特定の都市に最も近い他の都市をソートするクイックソートを作成しています。

これが私のコードです:

    private static void QuickSort(ArrayList<City> array, int First, int Last, City city ){
    int Low,High,MidDistance;
    Low = First;
    High = Last;
    Edge compareEdge = new Edge(array.get((First + Last)/ 2), city);
    MidDistance = compareEdge.computeDistance();

    do {
        compareEdge = new Edge(array.get(Low),city);
        while (compareEdge.computeDistance() < MidDistance){
            Low += 1;
            compareEdge = new Edge(array.get(Low),city);
        }

        compareEdge = new Edge(array.get(High),city);
        while (compareEdge.computeDistance() > MidDistance){
            High -= 1;
            compareEdge = new Edge(array.get(High),city);
        }

        if (Low <= High) {
                Swap(array,Low,High);
                Low = Low + 1;
                High = High - 1;
        }

    } while (Low <= High);

    if (First < High){
        QuickSort(array, First, High, city);
    }

    if (Low < Last){
        QuickSort(array, Low, Last, city);
    }

}

private static void Swap(ArrayList<City>array,int Low, int High){
    City tempCtiy = array.get(Low);
    array.get(Low).set(array.get(High));
    array.get(High).set(tempCtiy);
}

このコードは、私の MST クラス内にあります。だから私はそれを実行すると

スレッド「メイン」の例外 java.lang.IndexOutOfBoundsException: インデックス: 49、サイズ: 49

ここで起こります:

    while (compareEdge.computeDistance() < MidDistance){
        Low += 1;
        compareEdge = new Edge(array.get(Low),city);
    }

何が問題なのかを理解するのを手伝ってください。VB.netで書くとうまくいきます。

4

1 に答える 1

0

while以下のように終了条件をオンに追加しLowます。

      while (compareEdge.computeDistance() < MidDistance &&
              && Low < array.size()-1){
              Low += 1;
              compareEdge = new Edge(array.get(Low),city);
      }
于 2012-11-25T06:36:37.077 に答える