2015-01-23 14 views
0

Я делаю алгоритм для магазина. Я создал массив, содержащий информацию о клиенте. Теперь я хочу реализовать сортировку слияния в этом массиве и отсортировать ее по возрасту. Это мой код для класса клиента:Java - Merge sort array

public class Customer{ 

private int customerID; 
private String name; 
private int age; 
private char gender; 
private String email; 

public List<Customer> customerList = new ArrayList<Customer>(); 

public Customer(String name, int age, char gender, String email) { 
    this.customerID = customerList.size(); 
    this.name= name; 
    this.age= age; 
    this.gender= gender; 
    this.email = email; 
    customerList.add(this); 
} 
public int getCustomerID() { 
    return customerID; 
} 

public void setCustomerID(int customerID) { 
    this.customerID = customerID; 
} 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name= name; 
} 

public int getAge() { 
    return age; 
} 

public void setAge(int age) { 
    this.age = age; 
} 

public char getGender() { 
    return gender; 
} 

public void setGender(char gender) { 
    this.gender = gender; 
} 

public String getEmail() { 
    return email; 
} 

public void setEmail(String email) { 
    this.email = email; 
} 

}

Это мое слияние сортировки:

private int[] helper; 
private int number; 

public void sort(Klant[] values) { 
    this.customerList= values;      <---Error 
    number = values.length; 
    this.helper = new int[number]; 
    mergesort(0, number - 1); 
} 

private void mergesort(int low, int high) { 
    // check if low is smaller then high, if not then the array is sorted 
    if (low < high) { 
     // Get the index of the element which is in the middle 
     int middle = low + (high - low)/2; 
     // Sort the left side of the array 
     mergesort(low, middle); 
     // Sort the right side of the array 
     mergesort(middle + 1, high); 
     // Combine them both 
     merge(low, middle, high); 
    } 
} 

private void merge(int low, int middle, int high) { 

    // Copy both parts into the helper array 
    for (int i = low; i <= high; i++) { 
     helper[i] = customerList[i]; 
    } 

    int i = low; 
    int j = middle + 1; 
    int k = low; 
// Copy the smallest values from either the left or the right side back 
    // to the original array 
    while (i <= middle && j <= high) { 
     if (helper[i] <= helper[j]) { 
      customerList[k] = helper[i]; 
      i++; 
     } else { 
      customerList[k] = helper[j]; 
      j++; 
     } 
     k++; 
    } 
    // Copy the rest of the left side of the array into the target array 
    while (i <= middle) { 
     customerList[k] = helper[i]; 
     k++; 
     i++; 
    } 

} 

На линии с: this.customerList = значений; Я получаю сообщение об ошибке: несовместимые типы Клиент [] не может быть преобразован в Список

Мой вопрос в том, как я могу исправить эту ошибку и моя сортировка сортировки верна таким образом?

Edit 1: @Jens Ваш первый вариант: this.customerList = Arrays.asList (значения);

исправлена ​​ошибка. Но теперь я получаю ошибку на этой линии:

  helper[i] = customerList[i]; 

Он говорит: требуется массив, но список найдено

Кто-нибудь знает, как это исправить?

+0

'public List customerList = new ArrayList ();' Это список. Вы передаете массив 'Klant []'. Массивы и списки массивов разные. Вероятно, вы искали «Customer [] customerList;' – Compass

+0

Вы можете либо прикрыть свой список массивом, либо использовать список! – StackFlowed

ответ

2

Вы не можете назначить массив в список.

Попробуйте

this.customerList= Arrays.asList(values); 

или изменить метод parameetr к List<Customer>

public void sort(List<Customer> values) { 
0

Почему бы не использовать Collections.sort() метод? Он также использует алгоритм сортировки слиянием.

List<Klant> list = Arrays.asList(values); 
Collections.sort(list); 

Или вы можете использовать Arrays.sort() как хорошо, но он не использует своего рода слияния.

Но имейте в виду, что вам понадобится реализовать интерфейс Comparable для вашего класса Klant.

UPDATE:

В случае, если вам нужно реализовать алгоритм сортировки слиянием самостоятельно, вероятно, вам нужно изменить тип переменной customerList из List в массив Customer[]. Если вы хотите использовать список, вы можете сделать как Jens, но используйте метод add()List и не присваивайте значение через =.

+2

Ну, я полагаю, задача состоит в создании объединения, поэтому сортировка с использованием класса коллекций на самом деле не выполняет задачу с помощью объединения. – Compass