ich brauche Hilfe beim sortieren von meiner Array liste, jedoch DARF ich die String sort() methode NICHT benutzen. brauche wirklich Hilfe!!
ich hab unten meinen quelltext nur mal so
Java:
importjava.util.ArrayList;importjava.util.Iterator;publicclassWordList{privateArrayList<String> words =newArrayList();publicWordList(){}publicvoidaddWord(String word){
words.add(word);}publicvoidprintWords(int i){switch(i){case1:for(int index =0; words.get(index)!=null; index++){System.out.println(words.get(index));}case2:for(String word : words){System.out.println(word);}case3:while( i < words.size()){System.out.println(words.get (i));
i++;}case4:Iterator entries = words.iterator();while( entries.hasNext()){Object element = entries.next();System.out.println(element);}}// Implementieren Sie die verschiedenen Schleifenarten // Verwenden Sie das switch-Konstrukt (Buch Seite 554-555) // i=0: for-Schleife // i=1: for-each-Schleife // i=2: while-Schleife // i=3: iterator-Schleife }publicintnumberOfWords(){return words.size();// int rückgabe wert!!!//Die komplette Anzahl Wörter wird als Rückgabewert // zurückgeliefert }publicintnumberOfCharactersOfWord(int i){return words.get(i).length();}publicintnumberOfCharactersInList(){String list ="";for(String word : words){
list += word;}return list.length();}}
Sortierverfahren ? Wikipedia
Da findest du eine Liste an Sortierverfahren, schau dir ein paar davon an, such dir den aus der dir am besten gefällt, und implementier den. Wenn du da ne Frage zu hast dann helfen wir dir hier gern weiter.
Deine Hausaufgaben macht dir hier aber niemand
Grundsätzlich benötigst du zum sortieren 2 Dinge:
-Eine Methode die 2 Elemente vergleicht
-Einen Sortieralgorythmus
Möglich wäre also so etwas wie eine eigene vereinfachte compare-Methode:
Java:
/**
*Gibt true zurueck wenn der erste String hinter dem 2. einsortiert werden muss
*/publicbooleanisFirstStringGreaterAsSecondString(String first,String second);
Hast du eine Idee wie du so etwas implementieren könntest? (charweise die Strings vergleichen z.B.?)
Dann brauchst du einen Algorythmus zum sortieren, relativ einfach dürfte es sein mit einer leeren Liste anzufangen, dann ein Wort nach dem anderem einzufügen (add() fügt ja immer am Ende an, also könntest du dir z.b. immer den "kleinsten" String aus deiner startliste rausnehmen und den an die leere liste anhängen).
Wenn du einen Ansatz hast zeig mal her, dann kann man damit weiterarbeiten.
Java:
ich nehme mal an das String.compareTo(String) ebenfalls verboten ist.
hab mir die wiki Seite angesehen und herausgefunden das ich den "merge sort" benutzen kann. Bin im Moment diesen Code am entziffern den ich bei Stackoverflow gefunden hab.
Java:
/*
* Sorting methods, implemented using mergesort to sort the array of names
* alphabetically
*/publicString[]sort(String[] array){// check if the number of elements < 2if(array.length >1){// divide into two smaller arrays// determine length of two smaller arraysint arrLen1 = array.length;int arrLen2 = array.length - arrLen1;// populate smaller arrays with elements from initial arrayString[] array1 =newString[arrLen1];String[] array2 =newString[arrLen2];for(int i =0; i < arrLen1; i++){
array[i]= array1[i];}for(int i = arrLen1; i < array.length; i++){
array[i]= array2[i];}// now that we have the two halves, we can recursively call sort() on each to sort them
array1 =sort(array1);
array2 =sort(array2);// three counters are needed to keep track of where we are in the arrays, one for pos in final array, and one for each of the two halves// i => pos in main array// j => pos in array1// k => pos in array2int i =0, j =0, k =0;while(array1.length != j && array2.length != k){if(array1[i].compareTo(array2[i])<0){// copy current element of array1 to final array as it preceeds array2's current element
array[i]= array1[j];// increment the final array so we dont overwrite the value we just inserted
i++;// increment array1 which we took the element from so we dont compare it again
j++;}// If the element in array2 preceeds the element in array1else{// copy current element of array1 to final array as it preceeds array1's current element
array[i]= array2[j];// increment the final array so we dont overwrite the value we just inserted
i++;// increment array2 which we took the element from so we dont compare it again
k++;}}// at this point one of the sub arrays have been exhausted, and no more elements to comparewhile(array1.length != j){
array[i]= array1[j];
i++;
j++;}while(array2.length != k){
array[i]= array2[k];
i++;
k++;}}return array;}
programmiere in java erst seit knapp 4 wochen, wünschte ich könnte eine vorgefertigte methode wie String.compareTo(String) benutzen...
Kurz umrissen: Iteriere über das Array. Such das kleinste oder größte Element. Vertausche es mit dem ersten oder letzten Element. Wiederhole das Iterieren solange, bis das Array sortiert ist.
Nein, Selectionsort ist nur ein Verfahren um Elemente zu sortieren, was genau sortiert wird bestimmt die compare Methode. Du kannst also nicht nur Strings der Länge nach sortieren.