You are not logged in.

  • Login

1

Friday, December 14th 2007, 8:51pm

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...

Java 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

Java 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?????

Java Quellcode

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



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

Java Quellcode

1
private void swap(int one, int two)    {    long temp = a[one];    a[one] = a[two];    a[two] = temp;    }

2

Monday, December 17th 2007, 11:38pm

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

3

Tuesday, December 18th 2007, 12:54am

@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.

4

Tuesday, December 18th 2007, 9:48am

Also ich würde das so machen :

Java Quellcode

1
2
List<String> liste = Arrays.asList(strArray); // strArray = Dein String Array mit den Werten
Collections.sort(liste, Collator.getInstance());


Gruß,
X-Eon

5

Tuesday, December 18th 2007, 2:46pm

Hab das nun folgendermaßen versucht zu lösen. Doch so ganz klappt das nicht. Was ist falsch? Was muss anders???

Java Quellcode

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


Java Quellcode

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



Das sind mal meine kompletten Klassen...

Danke für weitere Hilfe

6

Tuesday, December 18th 2007, 3:20pm

Wie ich schon in der Email geschrieben habe, das ist eine BubbleSort rückwerts und keine SelectionSort.
Hier für selectioSort

da gibts auch eine Implementation von SelectionSort in java.
Ausserdem sehe ich hier nicht wie du das getest hast, wenn du keine main()-methode hast.

7

Tuesday, December 18th 2007, 4:13pm

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

Java Quellcode

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



Student.java

Java Quellcode

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


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

Java Quellcode

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

This post has been edited 1 times, last edit by "/etc/shadow" (Dec 18th 2007, 4:19pm)


8

Tuesday, December 18th 2007, 5:13pm

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

9

Tuesday, December 18th 2007, 5:34pm

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

10

Tuesday, December 18th 2007, 5:44pm

Sorry, aber ein team können wir trotzdem noch nicht anlegen. oder sind wir zu blöd?

11

Tuesday, December 18th 2007, 5:47pm

in zeile 84 :
//neues Team
Team te2 = new team(9);
//neuer Student
Student st5 = new Student(nachname, vorname, matNummer);
//einfügen student 5 ins Team 2
te2.add(st5);

so einfach geht es.

Social bookmarks