2013-02-15 2 views
1

Мой код приведен ниже. Это метод сортировки, включенный в проект вместо bubblesort для повышения эффективности кода. Моя проблема заключается в том, что я продолжаю получать ошибки, которые:Ошибки, реализующие quicksort

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

Пожалуйста, разместите полное сообщение об исключении и трассировку стека. –

+1

Является ли это ошибкой или ошибкой выполнения во время выполнения? – panoptical

+0

Я вижу различные подписи методов для QuickSort в вашем коде? Вы намеревались это сделать? Если да, можете ли вы опубликовать их также –

ответ

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

Я также не претендую на правильность логики в вашей программе, так как ее немного трудно читать. –

+0

Причина, по которой я был в замешательстве в основном о втором, объясняется тем, что учитель научил меня, что массивы находятся в списках ... поэтому для меня больше смысла использовать списки так, как я это делал ... Так что, честно говоря, это конкретная ошибка все еще меня смущает, поскольку я не знаю, с чего я должен заменить эту часть ... Я новичок, поэтому мне жаль, если я, кажется, задаю глупые вопросы ... – poplebop

+0

Кроме того, мой код намного больше, это всего лишь небольшая часть, один метод. Метод был отправлен мне моим учителем, и я исправил ошибки, которые мог. Если мой учитель не может это исправить, я не знаю, как я должен это знать. – poplebop