Я знаю, что есть встроенные процедуры, но, как ученик, я хочу сортировать с помощью своих устройств, а так как сортировка - это старая шляпа, я решил попробовать создать свою собственную родовую процедуру сортировки, которую я может использоваться для чисел или строк и, возможно, даже дат, если я когда-либо выясню, как они работают на Java.Общие проблемы с пузырьками arraylist
Итак, вот что я имел, совершив одну ошибку для другой для другого, до сих пор у меня есть только ошибки в двух местах (заключенные в маркеры «**»), с необходимостью выяснить, как сравнивать.
package sort;
import java.util.ArrayList;
public abstract class Sort<E> implements Comparable<E> {
public void swap(ArrayList<E> a, int i, int j) {
E c = a.get(i);
a.set(i,a.get(j));// = a[j];
a.set(j, c);
}
public void bubbleSort(ArrayList<E> a) {
boolean inOrder = false;
while (!inOrder) {
inOrder = true;
for (int i = 1; i < a.size(); i++) {
**if(a.get(i - 1).compareTo(a.get(i)) > 0)** {
//cannot find symbol: method compareTo(E); location: class Object
//where E is a type-variable: E extends Object declared in class Sort
inOrder = false;
swap(a, i, i - 1);
}
}
}
}
public static void main(String args[]) //hadda lose 'static' for 'setLayout' to work
{
ArrayList<Integer> ary = new ArrayList<>();
ary.add(2); ary.add(4); ary.add(7); ary.add(3);
**bubbleSort(ary)**;
//method bubbleSort in class Sort<E> cannot be applied to given types;
//required: ArrayList<E>
//found: ArrayList<Integer>
//reason: actual argument ArrayList<Integer> cannot be converted to ArrayList<E>
//by method invocation conversion where E is a type-variable:
//E extends Object declared in class Sort
for (int i = 0; i < ary.size(); i++) {
System.out.println(ary.get(i));
}
}
@Override
public int compareTo(E o) {
**return 0;** // fixing errors above may help this fall into place
}
}
Я пытаюсь узнать то, что я чувствую готов к только, чтобы найти, что я не совсем готов; близко, без сигары.
Могу ли я предположить, что, как ученик, вы изучаете лучшие алгоритмы сортировки, чем сортировка пузырьков? – millimoose
Кроме того, если 'bubbleSort()' является методом экземпляра, вы, вероятно, хотите 'new Sort() .bubbleSort (ary);' Если это статический метод, вам нужно будет передать параметр типа в явном виде на методы сами, объявив метод как «public static > bubbleSort (ArrayList a) {...}' вместо того, чтобы помещать параметр типа в класс 'Sort', который в этом случае действует только как пространство имен , –
millimoose
Вы полностью недопонимаете дженерики. – SLaks