2013-02-15 85 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