Hallo Zusammen,
ich muss leider schon wieder eure Hilfe in anspruch nehmen...
Ich habe ein Programm erstellt das einen Array von Studenten nach verschiedenen Kriterien sortieren kann, inkl. GUI. Das funktioniert soweit auch alles. Nun möchte ich aber eine weitere sortiermöglichkeit einbauen.
Ich möchte die Studentenliste nach Alter sortieren, aber step by step.
Untenstehend der aktuelle code dazu...
Ich hab mir überlegt das alles mit einem bubblesort (zeile 149)zu realisieren, aber irgendwie schaff ich es einfach nicht, als sortierkriterium "alter" zu definieren...
Was mach ich falsch? Ist der Ansatz Bubblesort richtig? und wie genau funktioniert das dann, dass ich auf der Ausgabe step by step das sortieren beobachten kann?:bahnhof:
Vielen Dank schonmal für eure Hilfe!
ich muss leider schon wieder eure Hilfe in anspruch nehmen...
Ich habe ein Programm erstellt das einen Array von Studenten nach verschiedenen Kriterien sortieren kann, inkl. GUI. Das funktioniert soweit auch alles. Nun möchte ich aber eine weitere sortiermöglichkeit einbauen.
Ich möchte die Studentenliste nach Alter sortieren, aber step by step.
Untenstehend der aktuelle code dazu...
Ich hab mir überlegt das alles mit einem bubblesort (zeile 149)zu realisieren, aber irgendwie schaff ich es einfach nicht, als sortierkriterium "alter" zu definieren...
Was mach ich falsch? Ist der Ansatz Bubblesort richtig? und wie genau funktioniert das dann, dass ich auf der Ausgabe step by step das sortieren beobachten kann?:bahnhof:
Vielen Dank schonmal für eure Hilfe!
Java:
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.swing.*;
import javax.swing.border.*;
import java.util.Iterator;
import java.util.List;
import java.util.Arrays;
import java.io.File;
/**
* HA3 basierend auf der zweiten Hausaufgabe erstellen Sie eine grafische Visualisierung Ihres
* Sortierprogramms. Beim Ablauf des Programms soll das sortieren dynamisch veranschaulicht werden.
* Statten Sie das Programm dazu mit einer Schaltfläche aus, so dass sich der Benutzer durch die
* einzelnen Sortierschritte klicken kann.
*
* Diese Klasse dient dazu, eine Liste von Studenten zu verwalten und nach verschiedenen
* Kriterien zu sortieren. Dies wird grafisch unterstützt durch eine entsprechende grafische Schnittstelle.
* Die sortierte Ausgabe kann einzeln aufgerufen werden.
*
* @author
* @version 1.2 04.12.2011
*/
public class Kurs
{
private Student[] studentListe;
private static final String VERSION = "Version 1.2";// setzt die Konstante für die Version des Programmes
private JFrame fenster;// variable für das Fenster
private JLabel dateinameLabel;
private JButton firstButton, secondButton, thirdButton, fourthButton, fifthButton;// variablen für die Buttons
private JTextArea workspace;// Textfeldvariable
/**
* Main-Methode, startet das Programm mit dem Befehl zur Ausführung des Konstruktors.
*/
public static void main (String[] args)
{
Kurs kurs = new Kurs();
}
/**
* Konstruktor, erzeugt einen Array, füllt diesen mit den Studenten ab und ruft die Methode zur Erzeugung
* der GUI auf.
*/
public Kurs()
{
studentListe = new Student[5];// erzeugt einen neuen Array mit 5 Positionen
// die Studenten werden erzeugt und dem Array angefügt
studentListe[0] = new Student();
studentListe[0].setnummer(1);
studentListe[0].setalter(12);
studentListe[0].setdurchschnitt(4.3);
studentListe[0].setname("Walterli Tell junjun.");
studentListe[1] = new Student();
studentListe[1].setnummer(2);
studentListe[1].setalter(467);
studentListe[1].setdurchschnitt(2.9);
studentListe[1].setname("Maria Stuart");
studentListe[2] = new Student();
studentListe[2].setnummer(3);
studentListe[2].setalter(9);
studentListe[2].setdurchschnitt(5.9);
studentListe[2].setname("Fritzli Schneider");
studentListe[3] = new Student();
studentListe[3].setnummer(4);
studentListe[3].setalter(2296);
studentListe[3].setdurchschnitt(6.0);
studentListe[3].setname("Archimedes Syrakus");
studentListe[4] = new Student();
studentListe[4].setnummer(5);
studentListe[4].setalter(20);
studentListe[4].setdurchschnitt(4.7);
studentListe[4].setname("Greengrey vonRotz");
fensterErzeugen();//Die Methode fensterErzeugung wird aufgerufen
}
/**
* Methode listeAusgebenUnsortiert gibt die Liste unsortiert auf der Konsole aus.
*/
public void listeAusgebenUnsortiert()
{
workspace.setText("Liste der Studenten unsortiert:\n");// die Liste der Studenten wird ausgegeben, unsortiert
for(int i=0; i < studentListe.length; i++)
{
workspace.append("Alter: " + studentListe[i].getalter() + ", Name: " + studentListe[i].getname() + ", Notendurchschnitt: " +
studentListe[i].getdurchschnitt() + ", Studentennummer: " + studentListe[i].getnummer() + "\n");
}
workspace.append("\n");
workspace.append("Die gesamte Teilnehmeranzahl des Kurses beträgt " + studentListe.length + " Studenten.\n");
}
/**
* Methode listeAusgebenSortiertAlter gibt den Anstoss zum sortieren der Liste nach Alter
* und gibt diese auf der Konsole aus.
*/
public void listeAusgebenSortiertAlter()
{
Arrays.sort(studentListe, new alterComparator()); // Gibt den Anstoss zum sortieren nach Alter.
workspace.setText("Studentenliste sortiert nach Alter:\n");// Gibt die Liste sortiert nach Alter aus.
for(int i=0; i < studentListe.length; i++)
{
workspace.append("Alter: " + studentListe[i].getalter() + ", Name: " + studentListe[i].getname() + ", Notendurchschnitt: " +
studentListe[i].getdurchschnitt() + ", Studentennummer: " + studentListe[i].getnummer() + "\n");
}
}
/**
* Methode listeAusgebenSortiertName gibt den Anstoss zum sortieren der Liste nach Name
* und gibt diese auf der Konsole aus.
*/
public void listeAusgebenSortiertName()
{
Arrays.sort(studentListe, new nameComparator()); // Gibt den Anstoss zum sortieren nach Name.
workspace.setText("Studentenliste sortiert nach Name:" + "\n");// Gibt die Liste sortiert nach Name aus.
for(int i=0; i < studentListe.length; i++)
{
workspace.append("Name: " + studentListe[i].getname() + ", Alter: " + studentListe[i].getalter() + ", Notendurchschnitt: " +
studentListe[i].getdurchschnitt() + ", Studentennummer: " + studentListe[i].getnummer() + "\n");
}
}
/**
* Methode listeAusgebenSortiertDurchschnitt gibt den Anstoss zum sortieren der Liste nach Notendurchschnitt
* und gibt diese auf der Konsole aus.
*/
public void listeAusgebenSortiertDurchschnitt()
{
Arrays.sort(studentListe, new durchschnittComparator()); // Gibt den Anstoss zum sortieren nach Durchschnittsnote.
workspace.setText("Studentenliste sortiert nach Notendurchschnitt:" + "\n");// Gibt die Liste sortiert nach Durchschnittsnote aus.
for(int i=0; i < studentListe.length; i++)
{
workspace.append("Notendurchschnitt: " + studentListe[i].getdurchschnitt() + ", Alter: " + studentListe[i].getalter() + ", Name: " +
studentListe[i].getname() + ", Studentennummer: " + studentListe[i].getnummer() + "\n");
}
}
/**
* Methode bubbleSort, sortiert die Studentenliste nach Alter, step by step.
*/
public void bubbleSort()
{
Student tmp;
int i,j;
int n=5;
for (i=0; i<n-1; i++)
{
for (j=0; j<n-i-1; j++)
{
if (studentListe[j] == studentListe[j+1])
{
tmp = studentListe[j];
studentListe[j] = studentListe[j+1];
studentListe[j+1] = tmp;
System.out.println(studentListe[j]);
}
}
}
}
/**
* Methode beenden, beendet das Programm.
*/
private void beenden()
{
System.exit(0);
}
/**
* Methode zeigeInfo, zeigt in einem Dialogfenster Informationen zum Programm. (Version, Name,...)
*/
private void zeigeInfo()
{
JOptionPane.showMessageDialog(fenster,
"Studenten Sortierprogramm\n" + VERSION,
"Info zu Studenten Sortierprogramm",
JOptionPane.INFORMATION_MESSAGE);
}
/**
* Methode fensterErzeugen, Erzeugt das Fenster und die Buttons und arrangiert das Layout.
*
* @ param fenster Variable für das Fenster, um die menuezeile zuzufuegen
* @ param contentPane Variable für den "Inhalt" des Fensters
* @ param workspace Variable für die Textarea
* @ param dateinameLabel Variable zur Anzeige des Dateinamens
* @ param werkzeugleiste Variable für die Fläche der Buttons, auf der die Buttons angefügt werden
* @ param firstButton, secondButton, thirdButton, fourthButton Variablen für die Buttons zur Bedienung des Programmes
*/
private void fensterErzeugen()
{
fenster = new JFrame("Studenten Sortierprogramm");// ein Fenster wird erzeugt und erhält einen Namen
JPanel contentPane = (JPanel)fenster.getContentPane();
contentPane.setBorder(new EmptyBorder(6, 6, 6, 6));
fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
menuezeileErzeugen(fenster);// ruft die Methode menuezeileErzeugen auf um dem Fenster die menuezeile anzufuegen
contentPane.setLayout(new BorderLayout(6, 6));
workspace = new JTextArea(15,60);
workspace.setLineWrap(true);
workspace.setBorder(new EtchedBorder());
workspace.setWrapStyleWord(true);
workspace.setTabSize(5);
contentPane.add(workspace, BorderLayout.CENTER);
dateinameLabel = new JLabel();
contentPane.add(dateinameLabel, BorderLayout.NORTH);
JPanel werkzeugleiste = new JPanel();//erzeugt eine Fläche namens werkzeugleiste
werkzeugleiste.setLayout(new GridLayout(0, 1));// setzt ein Grid- Layout
firstButton = new JButton("Ursprungszustand");
firstButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { listeAusgebenUnsortiert(); }
});
werkzeugleiste.add(firstButton);
secondButton = new JButton("Sortieren nach Alter");
secondButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { listeAusgebenSortiertAlter(); }
});
werkzeugleiste.add(secondButton);
thirdButton = new JButton("Sortieren nach Name");
thirdButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { listeAusgebenSortiertName(); }
});
werkzeugleiste.add(thirdButton);
fourthButton = new JButton("Sortieren nach Note");
fourthButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { listeAusgebenSortiertDurchschnitt(); }
});
werkzeugleiste.add(fourthButton);// Buttons werden der werkzeugleiste angefügt
fifthButton = new JButton("Sortieren Step by Step");
fifthButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { bubbleSort(); }
});
werkzeugleiste.add(fifthButton);// Buttons werden der werkzeugleiste angefügt
JPanel flow = new JPanel();
flow.add(werkzeugleiste);
contentPane.add(flow, BorderLayout.WEST);
fenster.pack();// das Fenster wird "gepackt"
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
fenster.setLocation(d.width/2 - fenster.getWidth()/2, d.height/2 - fenster.getHeight()/2);//das Fenster wird in der mitte des Bildschirmes platziert
fenster.setVisible(true);//macht das Fenster sichtbar
}
/**
* Methode menuezeileErzeugen erzeugt die Menuezeile sowie die einzelnen Menues.
*
* @ param fenster Variable für das Fenster, um die menuezeile zuzufuegen
* @ param menue Variable für die Eintraege in der Menuezeile
* @ param eintrag Variable für die einzelnen Auswahlmöglichkeiten innerhalb eines Menueeintrages
*/
private void menuezeileErzeugen(JFrame fenster)
{
final int SHORTCUT_MASK = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
JMenuBar menuezeile = new JMenuBar();// erzeugt die menuezeile
fenster.setJMenuBar(menuezeile);// fuegt die menuezeile dem Fenster an
JMenu menue;
JMenuItem eintrag;
menue = new JMenu("Datei");//erzeugt das menu datei
menuezeile.add(menue);//fuegt das menu datei an die menuzeile an
eintrag = new JMenuItem("Öffnen...");// ein neuer Eintrag oeffnen fuer das menu datei wird erzeugt
eintrag.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, SHORTCUT_MASK));// fuer das menu wird die Tastenkombination festgelegt
eintrag.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { listeAusgebenUnsortiert(); }
});// ActionListener fuer das menu
menue.add(eintrag);// der eintrag wird dem menu datei angefuegt
menue.addSeparator();// eine Trennlinie wird erzeugt
eintrag = new JMenuItem("Beenden");// ein neuer Eintrag beenden fuer das menu datei wird erzeugt
eintrag.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { beenden(); }
});//ActionListener fuer das menu
menue.add(eintrag);// eine Trennlinie wird erzeugt
menue = new JMenu("Hilfe");//erzeugt das menu Hilfe
menuezeile.add(menue);//fuegt das menu datei an die menuzeile an
eintrag = new JMenuItem("Programminformationen");// ein neuer Eintrag Programminformationen fuer das menu Hilfe wird erzeugt
eintrag.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { zeigeInfo(); }
});//ActionListener fuer das menu
menue.add(eintrag);//fuegt das menu Programminformationen an die menuzeile an
}
}