2015-05-10 2 views
0

Я хочу сортировать arraylist по имени продавца, но мне не разрешено использовать встроенную сортировку.
В следующем коде я пытаюсь вручную отсортировать его, но он показывает ошибку (обязательно: переменная найденная: значение) в комментариях.Сортировка arraylist в java без использования предопределенного метода сортировки

int j,k; 
    boolean flag = true; 
    Salesperson person = new Salesperson(null, 0, 0); 

    while (flag) { 
     flag = false; 
     for (j = 0, k=1; j < salesperson.size()-1; j++, k++) { 
      if (salesperson.get(j).getName().compareToIgnoreCase(salesperson.get(j+1).getName()) > 0) {            // ascending sort 

       person = salesperson.get(j); 
      // salesperson.get(j) = salesperson.get(k);  
      // salesperson.get(k) = person; 
       flag = true; 
      } 
     } 
    } 

ответ

0

Это правильный код. Я делал ошибку в тезисах линии

  //salesperson.get(j) = salesperson.get(k);  
     // salesperson.get(k) = person; 

они были заменены на следующие строки, а теперь нет ошибок

   salesperson.set(j, salesperson.get(k));  
       salesperson.set(k, person); 

Спасибо за ваши ответы

int j,k; 
    boolean flag = true; // will determine when the sort is finished 
    Salesperson person = new Salesperson(null, 0, 0); 

    while (flag) { 
     flag = false; 
     for (j = 0, k=1; j < salesperson.size()-1; j++, k++) { 
      if (salesperson.get(j).getName().compareToIgnoreCase(salesperson.get(j+1).getName()) > 0) {            // ascending sort 

       person = salesperson.get(j); 
       salesperson.set(j, salesperson.get(k));  
       salesperson.set(k, person); 
       flag = true; 
      } 
     } 
    } 
0

вы не можете отсортировать массив в одном цикле, по крайней мере, что я знаю, даже если вы получили часть в праве на if заявление, алгоритм по-прежнему не так. Вы только сравнивали каждого человека с прилегающим лицом за один проход.

Допустим, вы сортировки массива чисел, выглядит следующим образом:

5 4 6 3 1 2 с этим алгоритмом, вы бы этот результат 4 5 3 1 2 6

на один проход, как вы делали это до сих пор не отсортирован, только каждый число по сравнению с соседним.

Также о настройке значения используйте ArrayList.set(), как ответил Эран.

Here are some sorting algorithms

+0

Но это сработало именно так , Где ответ Эрана? Я хочу проголосовать. –

+0

А как-то я пропустил этот первый цикл извините ... ну да, это сработает, просто исправьте обмен. И мой ответ не тот, который вы не делали за один проход. – vlatkozelka

+0

Без проблем @vlatkozelka. Обычно это делается с использованием 2 для петель. –

0
//salesperson.get(j) = salesperson.get(k);  
// salesperson.get(k) = person; 

Вы вынимая значения с помощью метода Get(). Это нельзя использовать для назначения значений. Вот почему вы получаете ошибки компиляции.

Что вы должны сделать, это создать объект временный и назначен на это и сделать замену объектов Но вы должны перепроверить ваши итерации сортировки логики

+0

Может ли он действительно сортироваться таким образом? даже если он получит право подкачки, может ли он действительно сортироваться за один проход? – vlatkozelka

+0

Да, это тоже не сработает. Мой плохой –

+0

ой ... да, я пропустил это как-то – vlatkozelka

Смежные вопросы