Generisch

julia123

Erfahrenes Mitglied
hi Leute,

Ich versuch jetzt schon seit Stunden hier diesen Quellcode generisch zumachen, so dass ich die in der main befindenden Arrays auslesen zu können.

Code:
public static void main(String[] args) {

		int test[] = { 2, 1, 3, 0 };
		System.out.println(Arrays.toString(test));
		ccsA2(test);
		System.out.println(Arrays.toString(ccsA2(test)));

	}

	public static <T extends Comparable<T>> ArrayList[] ccsA2(T[] a) {

		int Count[] = new int[a.length];//muss ich hier was ändern?

		for (int i = 0; i <= a.length - 1; i++) {
			Count[i] = 0;

		}

		for (int i = 0; i <= a.length - 2; i++) {
			for (int j = i + 1; j <= a.length - 1; j++) {

				
				if (a[i].compareTo(a[j]) < 0) {
					Count[j] = Count[j] + 1;

				} else {
					Count[i] = Count[i] + 1;

				}

			}

		}

		ArrayList<T> s = new ArrayList<T>();
		// T[] s = new [a.length];
		for (int i = 0; i <= a.length - 1; i++) {
			// s[Count[i]] = a[i];
			s.add(a[i]);

		}
		
		return s;

	}

Im Kommentar kann man sehen das ich es schon auf eine andere Art versucht haben. Leider ohne Erfolg.
 

julia123

Erfahrenes Mitglied
ich hab die Zeile 35-44

jetzt so ersetzt:

Code:
@SuppressWarnings("unchecked")
		T[] s = (T[]) new Comparable[a.length];
		for (int i = 0; i <= a.length - 1; i++) {
			s[Count[i]] = a[i];
		}

		return s;



Zweck :
Geben Sie eine Implementierung als statische generische Methode in Java an. Ihre Funktion soll Arrays
mit beliebigen, aber vergleichbaren Elementen sortieren.

Und es läuft immer noch nicht bitte um Hilfe!
 
Zuletzt bearbeitet:

hendl

Erfahrenes Mitglied
Hi
Ich weis nicht wie sehr du an deinem Code hängst aber, das hier wäre eine viel kürzere und einfachere Methode. Wobei du einfach aus dem Array eine List erstellen musst und dann Collections.sort(<Liste>); aufrufen musst und sie automatisch für dich sortiert wird.

edit:
Nach ein bisschen Schlaf folgt nun auch eine Erklärung dazu :D
Dein Lösungsweg ist dahingehend schwierig da du vor den Zuweisungen
Java:
Count[i] = Count[i] + 1;
immer eine Typprüfung mit instanceof durchführen müsstest und es den Code sehr aufbläht und er dadurch auch viel ressourcenverschlingender wird.
Java:
public static void main(String[] args) {
 
        Integer test[] = { 2, 1, 3, 0 };
        System.out.println(Arrays.toString(test));
        System.out.println(ccsA2(test));
 
    }
 
	public static <T extends Comparable<T>> List<T> ccsA2(T[] a) {
 
        List<T> Count= new LinkedList<T>();
 
        for (int i = 0; i <= a.length - 1; i++) {
            Count.add(a[i]);
 
        }
        Collections.sort(Count);
        return Count;
 
    }

Lg hendl55
 
Zuletzt bearbeitet:

julia123

Erfahrenes Mitglied
danke erst mal,

der Code muss bleiben ! ComparisonCounting-Sort

Aufgabenstellung:
Geben Sie eine Implementierung als statische generische Methode in Java an. Ihre Funktion soll Arrays
mit beliebigen, aber vergleichbaren Elementen sortieren.

Mit generic bin ich nucht ganz fest. Ich bin mir nicht sicher ob der code wie ich ihn oben gemacht habe diese Aufgabe erfüllt.


ich gaub ich hab mich ziehmlich dumm angestellt int[] können mit generics nicht ausgeführt werden she ich das richtig?
 
Zuletzt bearbeitet:

hendl

Erfahrenes Mitglied
Hi
So nach einiger Nachdenkzeit bin ich doch noch zu einer Lösung gekommen :D

Java:
public static void main(String[] args) {

		Integer test[] = { 3, 12, 1 };
		System.out.println(Arrays.toString(test));
		System.out.println(ccsA2(test));

	}

	// public static <T extends Comparable<T>> List<T> ccsA2(T[] a) { // Andere
	// Möglichkeit
	//
	// List<T> Count= new LinkedList<T>();
	//
	// for (int i = 0; i <= a.length - 1; i++) {
	// Count.add(a[i]);
	//
	// }
	// Collections.sort(Count);
	// return Count;
	//
	// }

	public static <T extends Comparable<T>> List<T> ccsA2(T[] a) {
		ArrayList<T> s = new ArrayList<T>(); // Neue ArrayList erstellen in die
												// die sortierten Elemente
												// eingfügt werden
		for (int i = 0; i < a.length; i++) { // Alle Element von a durchgehen
			int j = 0;
			while (s.size() > j && a[i].compareTo(s.get(j)) > 0)
				// Schleife solange durchgehen bis zum Ende der ArrayList oder
				// falls Element größer wie vorheriges in ArrayList
				j++;
			s.add(j, a[i]); // Element an berechnete Position in ArrayList
							// einfügen
		}
		return s;

	}

Lg hendl