2013-02-15 95 views
1

我的代碼如下。它是一個包含在項目中的排序方法,而不是代碼效率的bubblesort。我的問題是,我不斷收到錯誤,這些錯誤是:實施快速排序的錯誤

array required, but java.util.List<Inpatient> found

&

QuickSort(java.util.List<Inpatient>,int,int) in UtilitiesInpatient cannot be applied to (int,int)

我試着做一些研究,但很多的算法依賴於字符串或整數變化很大排序以及對錯誤本身的研究非常無益。非常感謝任何幫助或提示!

public void QuickSort (List<Inpatient> inpatientArrayListIn, int first, int last) 
    { 

     // Quick Sort 

     List<Inpatient> pivotValue = new ArrayList<Inpatient>(); 
     List<Inpatient> lowerPointerValue = new ArrayList<Inpatient>(); 
     List<Inpatient> upperPointerValue = new ArrayList<Inpatient>(); 

     int pivotIndex = first; 
     Inpatient tempPatient = (inpatientArrayListIn.get(pivotIndex)); 
     String pivot = tempPatient.getSurname(); 
     int upperPointer = first; 
     int lowerPointer = last; 

     while (upperPointer < lowerPointer) { 


      while ((inpatientArrayListIn.get(upperPointer).getSurname().compareToIgnoreCase(pivot) <= 0) && (upperPointer < last)) { 

       upperPointer++; 

      } 


      while (((inpatientArrayListIn.get(lowerPointer).getSurname()).compareToIgnoreCase(pivot) > 0) && (lowerPointer > first)){ 

       lowerPointer--; 

      } 

      if (upperPointer < lowerPointer) { 

       for (int i = 0; i <= inpatientArrayListIn.size(); i++) { 

        upperPointerValue[i] = ((inpatientArrayListIn.get(upperPointer))); 
        lowerPointerValue[i] = ((inpatientArrayListIn.get(lowerPointer))); 

       } 

       /* defaultTable.removeRow (upperPointer); 
       defaultTable.insertRow (upperPointer, lowerPointerValue); 
       defaultTable.removeRow (lowerPointer); 
       defaultTable.insertRow (lowerPointer, upperPointerValue); 
       */ 
       ++upperPointer; 
       --lowerPointer; 

      } 

     } 

     if ((inpatientArrayListIn.get(lowerPointer).getSurname()).compareTo(pivot) < 0) { 

      for (int i = 0; i <= inpatientArrayListIn.size(); i++) { 

       pivotValue[i] = inpatientArrayListIn.get(pivotIndex); 
       lowerPointerValue[i] = (inpatientArrayListIn.get(lowerPointer)); 

      } 
      /* 
      defaultTable.removeRow (pivotIndex); 
      defaultTable.insertRow (pivotIndex, lowerPointerValue); 
      defaultTable.removeRow (lowerPointer); 
      defaultTable.insertRow (lowerPointer, pivotValue); 
      */ 
     } 

     // Value in lowerPointer is now the pivot 

     if (first < (lowerPointer-1)) 
     { 

      QuickSort (first, (lowerPointer-1)); 

     } 

     if ((lowerPointer+1) < last) 
     { 

      QuickSort ((lowerPointer+1), last); 

     } 

    } 
+1

請發佈完整的異常消息和堆棧跟蹤。 – 2013-02-15 19:50:59

+1

這是編譯器錯誤還是發生運行時異常? – panoptical 2013-02-15 19:53:43

+0

我在代碼中看到QuickSort的不同方法簽名?你打算這麼做嗎?如果是這樣,你可以發佈那些 – 2013-02-15 19:58:18

回答

0

在這個部分:

if (first < (lowerPointer-1)) 
    { 

     QuickSort (first, (lowerPointer-1)); 

    } 

    if ((lowerPointer+1) < last) 
    { 

     QuickSort ((lowerPointer+1), last); 

    } 

你缺少第一個參數,List<Inpatient> inpatientArrayListIn,正是因爲錯誤消息描述。此外,您嘗試使用List作爲數組,如:

upperPointerValue[i] = ((inpatientArrayListIn.get(upperPointer))); 

如果我們看一下爲List的文檔,你想用的方法set(int index, E element),所以上面會:

upperPointerValue.set(i, inpatientArrayListIn.get(upperPointer)); 

對於編譯器還沒有告訴你的問題,真的沒有太多可以說的。

+0

我也沒有聲明你的程序中邏輯的有效性,因爲它有點難以閱讀。 – 2013-02-15 20:03:48

+0

我之所以困惑主要是因爲第二個原因,是因爲老師教我數組,在列表中找到......所以對我來說使用列表更像我做的事情......所以說實話,那特別的錯誤仍然讓我困惑,因爲我不知道我應該用什麼替代那部分......我是初學者,所以我很抱歉,如果我似乎在問一些愚蠢的問題...... – poplebop 2013-02-15 20:05:32

+0

另外,我的代碼是大得多,這只是一小部分,一種方法。該方法是由我的老師發送給我的,我修復了我能夠修復的錯誤。如果我的老師無法解決這個問題,我不知道該怎麼做。 – poplebop 2013-02-15 20:07:10