String Array Sortieren Selectionsort

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • String Array Sortieren Selectionsort

    Okidoki... Hab mal wieder ein kleines Problem

    Und zwar hab ich eine Klasse Team und eine Klasse Student.
    Die Studenten sind in einem Array Team abgespeichert...

    Quellcode

    1. Student[] team


    Nun will ich meinem Team eine Methode hinzufügen, die das Team nach ihren Studentenmitgliedern sortiert....
    Es soll selectionsort genutzt werden.

    Hab eine Selectionmethode für integerwerte

    Quellcode

    1. public void sortieren() { int out, in, min; for(out=0; out< a[min] ) // if min greater, min = in; // we have a new min swap(out, min); // swap them } // end for(out) } // end selectionSort()


    Wie stell ich es jetzt an meine Strings aus dem Array zu sortieren?????

    Quellcode

    1. public void sortieren(Student[] team)
    2. {
    3. int index = 0;
    4. char separator = ' ';
    5. int count = 1;
    6. while((index = text.indexOf(' ',index)) != -1)
    7. {
    8. index++;
    9. count++;
    10. }
    11. Student[] team = new Student[];
    12. index = 0;
    13. int endIndex = 0;
    14. for(int i = 0; i < count; i++)
    15. {
    16. endIndex = text.indexOf(separator,index);
    17. if(endIndex == -1)
    18. student[i] = text.substring(index);
    19. else
    20. student[i] = text.substring(index,endIndex);
    21. index = endIndex + 1;
    22. }
    23. {
    24. int i,j;
    25. String a;
    26. for(j = 1; j < count; j++)
    27. {
    28. a = student[j];
    29. i = j - 1;
    30. while((i >= 0) && (student[i].compareTo(a) > 0))
    31. {
    32. student[i+1] = student[i];
    33. i--;
    34. }
    35. student[i+1] = a;
    36. }
    37. }
    38. for(int i = 0; i < student.length; i++)
    39. System.out.println(student[i]);
    40. }
    41. }
    Alles anzeigen



    Bzw. brauche ich dazu auch noch so eine Swapmethode zum tauschen oder kann ich das in der sortiermethode mit einbringen??

    Quellcode

    1. private void swap(int one, int two) { long temp = a[one]; a[one] = a[two]; a[two] = temp; }
  • @Blane : kannst du bitte das nächste mal Kommentare zu deinem Code schreiben ? oder soll der Leser jede Zeile lesen und verstehen was du damit machen willst ?


    Also, ich versuch einfach zu klären wie du das machen kannst :

    counter = 0
    Du nimmst als Referenz das erste Element array[counter]
    Du vergleichst alle anderen Elemente mit sich selbst um das min von denen zu kriegen (du vergleichst char nach dem anderen also von str.charAt(0) bis min(str1.length(), str2.charAt())) .. also min = array[1] und dann wenn array[x] < min, setze min = array[x] .. wenn du das min hast vertauchst du es mit deiner referenz array[counter]
    counter++ und machst das gleiche mit dem zweiten Element also array[1] .. das min von den restlichen und dann vertauchen ..
    bis du am ende des arrays bist ..
    dann hast du dein selectionSort ..

    vergleiche machst du einfach char nach dem anderen.

    zb :
    "kevin" und "kevan"
    str1.charAt(1) == str2.charAt(1)
    str1.charAt(2) == str2.charAt(2)
    str1.charAt(3) == str2.charAt(3)
    str1.charAt(1) > str2.charAt(1)

    also str2 kommt vor str1 ..
    Chars lassen sich mit == < > vergleichen.
  • Hab das nun folgendermaßen versucht zu lösen. Doch so ganz klappt das nicht. Was ist falsch? Was muss anders???

    Quellcode

    1. public interface Comparable{
    2. public class Team {
    3. // instance variables:
    4. private Student[] team;
    5. private int zteam; //Zeiger auf Array team = Anzahl der Teammitglieder
    6. /**
    7. * Constructor for objects of class Team
    8. */
    9. public Team(int maxTeam) {
    10. // initialise instance variables
    11. team = new Student[maxTeam];
    12. zteam=0;
    13. }//Team
    14. // nicht gefordert: Standard-Team mit Größe 10
    15. public Team(){ this(10); }
    16. public void add(Student neu) {
    17. if(zteam<team.length) {
    18. team[zteam] = neu;
    19. zteam++;
    20. }//if
    21. }//sampleMethod
    22. public int size(){ return zteam;}
    23. public Student get(int index){
    24. if(index>=0 &&index<zteam) return team[index];
    25. // es könnte auch ein Student objekt ohne Inhalte geliefert werden:
    26. // return new Student("","",0);
    27. else return null; //kein Objekt - leere Adresse
    28. }//get
    29. public void remove(int index){
    30. if(index>=0 &&index<zteam) {
    31. for(int i=index;index<zteam-1;index++)team[index] = team[index+1];
    32. zteam--; //Ein Mitglied weniger
    33. }//if
    34. }//remove
    35. public void ausgabe(){
    36. IntIO io = new IntIO();
    37. io.writeln("Unser Team:");
    38. for(int i=0;i<zteam;i++) io.writeln((i+1)+". "+team[i]);
    39. }//ausgabe
    40. public void sort(Student[] a)
    41. {
    42. for(int i = a.length - 1; i > 0; i--)
    43. {
    44. for(int j = 0; j < i; j++)
    45. {
    46. if((a[j].compareTo(a[j + 1])) > 0)
    47. {
    48. Student z = a[j];
    49. a[j] = a[j + 1];
    50. a[j + 1] = z;
    51. }
    52. }
    53. }
    54. }
    55. }
    56. }//Team
    Alles anzeigen


    Quellcode

    1. public class Student implements Comparable {
    2. // Merkmale eines Studenten
    3. private String mname;
    4. private String mvorname;
    5. private int mmatrikel;
    6. private int mects;
    7. /**
    8. * Erster Konstrukor mit allen Parametern:
    9. * @param name- Name des Studenten
    10. * @param vorname - Vorname
    11. * @param matNr - Matrikelnummer
    12. * @param pkte- Anzahl bisheriger ECTS-Punkte
    13. */
    14. public Student(String name, String vorname, int matNr, int pkte){
    15. mname = name;
    16. mvorname = vorname;
    17. mmatrikel= matNr;
    18. mects = pkte;
    19. }//Student
    20. /**
    21. * Zweiter Konstrukor für neuen Studenten ohne bisherige Punkte:
    22. * @param name- Name des Studenten
    23. * @param vorname - Vorname
    24. * @param matNr - Matrikelnummer
    25. */
    26. public Student(String name, String vorname, int matNr){
    27. mname = name;
    28. mvorname = vorname;
    29. mmatrikel= matNr;
    30. mects = 0;
    31. }//Student
    32. //-- Zugriffsmethoden -------------------------------------------
    33. //-- lesende/sondirende Methoden:
    34. public String getName () { return mname; }
    35. public String getVorname () { return mvorname; }
    36. public int getMatrikel() { return mmatrikel;}
    37. public int getECTS () { return mects; }
    38. //-- verändernde/schreibende Methoden:
    39. public void setECTS(int pkte){ mects=pkte; }
    40. //-- Verarbeitung
    41. public void pruefungBestanden(int pkte) {
    42. mects = mects + pkte;
    43. }//pruefungBestanden
    44. //-- Hier die Ausgabe-Methode:
    45. // Da nicht über Ausgabe gesprochen wurde, war dieses nicht entscheidend:
    46. public void ausgabe(){
    47. System.out.println(
    48. mname+", "+mvorname+", "+mmatrikel+" : "+mects+" ECTS");
    49. }//ausgabe
    50. //-- toString für die bequeme Ausgabe:
    51. public String toString(){
    52. return mname+", "+mvorname+", "+mmatrikel+" : "+mects+" ECTS";
    53. }//toString
    54. public int compareTo(Student student)
    55. {
    56. return mname.compareTo(student.getName());
    57. }
    58. }//Student
    Alles anzeigen



    Das sind mal meine kompletten Klassen...

    Danke für weitere Hilfe
  • fincky87 schrieb:

    Da ich vor der selben Aufgabe stehe würden mich da auch einige Lösungshinweise interessieren. Bin grad ziemlich planlos!


    also, ich poste einfach mal die Lösung die ich Blane per email geschrieben habe ..

    Team.java

    Quellcode

    1. interface Comparable{
    2. public class Team {
    3. // instance variables:
    4. private Student[] team;
    5. private int zteam; //Zeiger auf Array team = Anzahl der Teammitglieder
    6. /**
    7. * Constructor for objects of class Team
    8. */
    9. public Team(int maxTeam) {
    10. // initialise instance variables
    11. team = new Student[maxTeam];
    12. zteam=0;
    13. }//Team
    14. // nicht gefordert: Standard-Team mit Größe 10
    15. public Team(){ this(10); }
    16. public void add(Student neu) {
    17. if(zteam<team.length) {
    18. team[zteam] = neu;
    19. zteam++;
    20. }//if
    21. }//sampleMethod
    22. public int size(){ return zteam;}
    23. public Student get(int index){
    24. if(index>=0 &&index<zteam) return team[index];
    25. // es könnte auch ein Student objekt ohne Inhalte geliefert werden:
    26. // return new Student("","",0);
    27. else return null; //kein Objekt - leere Adresse
    28. }//get
    29. public void remove(int index){
    30. if(index>=0 &&index<zteam) {
    31. for(int i=index;index<zteam-1;index++)team[index] = team[index+1];
    32. zteam--; //Ein Mitglied weniger
    33. }//if
    34. }//remove
    35. public void ausgabe(){
    36. //IntIO io = new IntIO();
    37. System.out.println("Unser Team:");
    38. for(int i=0;i<zteam;i++) System.out.println((i+1)+". "+team[i]);
    39. }//ausgabe
    40. public void sort() {
    41. for(int i=0 ; i < team.length - 1 ; i++) {
    42. int minPos = minimumPosition(i);
    43. swap(minPos, i);
    44. }
    45. }
    46. // findet die kleinste zahl ausgehend vom ende
    47. private int minimumPosition(int from) {
    48. int minPos = from;
    49. for(int i = from + 1 ; i < team.length ; i++) {
    50. //vergleiche die vornamen
    51. if(team[i].getVorname().compareTo(team[minPos].getVorname()) < 0)
    52. minPos = i;
    53. //wenn die vornamen gleich sind, vergleiche die nachnamen
    54. else if(team[i].getVorname().compareTo(team[minPos].getVorname()) == 0) {
    55. if(team[i].getName().compareTo(team[minPos].getName()) < 0)
    56. minPos = i;
    57. }
    58. }
    59. return minPos;
    60. }
    61. // swap zwei einträge im array
    62. private void swap(int i, int j) {
    63. Student temp = team[i];
    64. team[i] = team[j];
    65. team[j] = temp;
    66. }
    67. }
    68. }//Team
    Alles anzeigen



    Student.java

    Quellcode

    1. public class Student implements Comparable {
    2. // Merkmale eines Studenten
    3. private String mname;
    4. private String mvorname;
    5. private int mmatrikel;
    6. private int mects;
    7. /**
    8. * Erster Konstrukor mit allen Parametern:
    9. * @param name - Name des Studenten
    10. * @param vorname - Vorname
    11. * @param matNr - Matrikelnummer
    12. * @param pkte - Anzahl bisheriger ECTS-Punkte
    13. */
    14. public Student(String name, String vorname, int matNr, int pkte){
    15. mname = name;
    16. mvorname = vorname;
    17. mmatrikel= matNr;
    18. mects = pkte;
    19. }//Student
    20. /**
    21. * Zweiter Konstrukor für neuen Studenten ohne bisherige Punkte:
    22. * @param name - Name des Studenten
    23. * @param vorname - Vorname
    24. * @param matNr - Matrikelnummer
    25. */
    26. public Student(String name, String vorname, int matNr){
    27. mname = name;
    28. mvorname = vorname;
    29. mmatrikel= matNr;
    30. mects = 0;
    31. }//Student
    32. //-- Zugriffsmethoden -------------------------------------------
    33. //-- lesende/sondirende Methoden:
    34. public String getName () { return mname; }
    35. public String getVorname () { return mvorname; }
    36. public int getMatrikel() { return mmatrikel;}
    37. public int getECTS () { return mects; }
    38. //-- verändernde/schreibende Methoden:
    39. public void setECTS(int pkte){ mects=pkte; }
    40. //-- Verarbeitung
    41. public void pruefungBestanden(int pkte) {
    42. mects = mects + pkte;
    43. }//pruefungBestanden
    44. //-- Hier die Ausgabe-Methode:
    45. // Da nicht über Ausgabe gesprochen wurde, war dieses nicht entscheidend:
    46. public void ausgabe(){
    47. System.out.println(mname+", "+mvorname+", "+mmatrikel+" : "+mects+" ECTS");
    48. }//ausgabe
    49. //-- toString für die bequeme Ausgabe:
    50. public String toString(){
    51. return mname+", "+mvorname+", "+mmatrikel+" : "+mects+" ECTS";
    52. }//toString
    53. public int compareTo(Student student) {
    54. return mname.compareTo(student.getName());
    55. }
    56. }//Student
    Alles anzeigen


    und hier eine test methode .. tess.java in dem ich 3 studenten und ein team erzeugt habe.

    Quellcode

    1. class tess implements Comparable {
    2. //main methode
    3. public static void main(String [] args) {
    4. //3 studenten
    5. Student st1, st2, st3;
    6. //konstruktion nachname, vorname, matnummer für jeden Studenten
    7. st1 = new Student("aaa","bbb",112);
    8. st2 = new Student("aac","bbb",112);
    9. st3 = new Student("aab","bcb",112);
    10. //team erzeugen
    11. Team te = new Team(3);
    12. //studenten ins team reintun
    13. te.add(st1);
    14. te.add(st2);
    15. te.add(st3);
    16. //ausgabe ohne sortieren
    17. te.ausgabe();
    18. //sortieren
    19. te.sort();
    20. //ausgabe nach dem sortieren
    21. te.ausgabe();
    22. }
    23. }
    Alles anzeigen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von /etc/shadow ()

  • fincky87 schrieb:

    Nun haben wir zwar ein Programm was funktioniert, aber können keine statische mainmethode oder ein team erzeugen!


    ok .. ich habe jetzt einfach einen TestTeam classe mit Team geschrieben ..
    das muss eure Probleme jetzt lösen ..
    Ich code nicht mit BlueJ oder Eclipse .. deswegen kann ich euch nicht sagen was ihr wirklich machen könnt !
    wie wäre es damit :

    TestTeam.java

    Java-Quellcode

    1. interface Comparable{
    2. public class Team {
    3. // instance variables:
    4. private Student[] team;
    5. private int zteam; //Zeiger auf Array team = Anzahl der Teammitglieder
    6. /**
    7. * Constructor for objects of class TestTeam
    8. */
    9. public Team(int maxTeam) {
    10. // initialise instance variables
    11. team = new Student[maxTeam];
    12. zteam=0;
    13. }//TestTeam
    14. // nicht gefordert: Standard-TestTeam mit Größe 10
    15. public Team(){ this(10); }
    16. public void add(Student neu) {
    17. if(zteam<team.length) {
    18. team[zteam] = neu;
    19. zteam++;
    20. }//if
    21. }//sampleMethod
    22. public int size(){ return zteam;}
    23. public Student get(int index){
    24. if(index>=0 &&index<zteam) return team[index];
    25. // es könnte auch ein Student objekt ohne Inhalte geliefert werden:
    26. // return new Student("","",0);
    27. else return null; //kein Objekt - leere Adresse
    28. }//get
    29. public void remove(int index){
    30. if(index>=0 &&index<zteam) {
    31. for(int i=index;index<zteam-1;index++)team[index] = team[index+1];
    32. zteam--; //Ein Mitglied weniger
    33. }//if
    34. }//remove
    35. public void ausgabe(){
    36. //IntIO io = new IntIO();
    37. System.out.println("Unser TestTeam:");
    38. for(int i=0;i<zteam;i++) System.out.println((i+1)+". "+team[i]);
    39. }//ausgabe
    40. public void sort() {
    41. for(int i=0 ; i < team.length - 1 ; i++) {
    42. int minPos = minimumPosition(i);
    43. swap(minPos, i);
    44. }
    45. }
    46. // findet die kleinste zahl ausgehend vom ende
    47. private int minimumPosition(int from) {
    48. int minPos = from;
    49. for(int i = from + 1 ; i < team.length ; i++) {
    50. //vergleiche die vornamen
    51. if(team[i].getName().compareTo(team[minPos].getName()) < 0)
    52. minPos = i;
    53. //wenn die vornamen gleich sind, vergleiche die nachnamen
    54. else if(team[i].getName().compareTo(team[minPos].getName()) == 0) {
    55. if(team[i].getVorname().compareTo(team[minPos].getVorname()) < 0)
    56. minPos = i;
    57. }
    58. }
    59. return minPos;
    60. }
    61. // swap zwei einträge im array
    62. private void swap(int i, int j) {
    63. Student temp = team[i];
    64. team[i] = team[j];
    65. team[j] = temp;
    66. }
    67. }
    68. }//TestTeam
    69. class TestTeam implements Comparable{
    70. public static void main(String [] args) {
    71. Student st1, st2, st3, st4;
    72. st1 = new Student("claus","bbb",112);
    73. st2 = new Student("arno","bbb",112);
    74. st3 = new Student("berd","bcb",112);
    75. st4 = new Student("claus","aaa",112);
    76. Team te = new Team(4);
    77. te.add(st1);
    78. te.add(st2);
    79. te.add(st3);
    80. te.add(st4);
    81. te.ausgabe();
    82. te.sort();
    83. te.ausgabe();
    84. }
    85. }
    Alles anzeigen