31.6
Lösungen
|
Aufgabe 1
Download:
JKellerDemo.java |
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import listen.adt.*;
public class JKellerDemo extends JFrame
implements ActionListener {
JPanel zentrumPanel;
JTextField eingabePush, ausgabe;
JButton bPush, bIsEmpty, bPop, bTop;
Keller keller;
public JKellerDemo (String title) {
super (title);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(300, 200);
Container cp = getContentPane();
cp.setLayout(new BorderLayout());
zentrumPanel = new JPanel(new GridLayout(2,2,4,4));
cp.add(zentrumPanel,BorderLayout.CENTER);
eingabePush = new JTextField("0",12);
cp.add(eingabePush,BorderLayout.NORTH);
bPush = new JButton("push");
zentrumPanel.add(bPush);
bPush.addActionListener(this);
bPop = new JButton("pop");
zentrumPanel.add(bPop);
bPop.setEnabled(false);
bPop.addActionListener(this);
bIsEmpty = new JButton("isEmpty");
zentrumPanel.add(bIsEmpty);
bIsEmpty.addActionListener(this);
bTop = new JButton("top");
zentrumPanel.add(bTop);
bTop.setEnabled(false);
bTop.addActionListener(this);
ausgabe = new JTextField("");
cp.add(ausgabe,BorderLayout.SOUTH);
ausgabe.setEditable(false);
keller = new Keller();
setVisible(true);
}
public void actionPerformed(ActionEvent e){
Object obj = e.getSource();
if (obj == (Object) bPush){
keller.push(eingabePush.getText());
bTop.setEnabled(true);
bPop.setEnabled(true);
ausgabe.setText(""+ keller.top() + " ist eingekellert!");
}
if (obj == bPop){
ausgabe.setText(""+ keller.top() + " wird vom Keller entfernt!");
keller.pop();
if (keller.isEmpty()){
bPop.setEnabled(false);
bTop.setEnabled(false);
}
}
if (obj == bIsEmpty){
if(keller.isEmpty())ausgabe.setText("Der Keller ist leer");
else ausgabe.setText("Der Keller ist nicht leer");
}
if (obj == bTop){
ausgabe.setText("Oberstes Kellerelement ist: " + keller.top());
}
}
public static void main (String[] args) {
new JKellerDemo("JKellerDemo");
}
}
Abb. 26.6.1 GUI zum Keller
|
Aufgabe 2
Download:
KellerA1.java |
import listen.adt.*;
public class KellerA1 {
private static Keller k;
private static void ausgeben(){
Keller kellerTMP = new Keller();
while(!k.isEmpty()){
System.out.println(k.top());
kellerTMP.push(k.top());
k.pop();
}
k = kellerTMP;
}
public KellerA1(){
k = new Keller();
//Aufbau des Kellers k1
for (int i=1; i<= 10; i++){
k.push(new Integer(i));
}
ausgeben();
}
public static void main (String[] args) {
new KellerA1();
}
}
10
9
8
7
6
5
4
3
2
1
|
Aufgabe 3
Download:
KellerA2.java |
import listen.adt.*;
public class KellerA2 {
private static Keller k;
private static void ausgeben(){
Keller kellerTMP = new Keller();
while(!k.isEmpty()){
System.out.println(k.top());
kellerTMP.push(k.top());
k.pop();
}
k = kellerTMP;
}
public KellerA2(){
k = new Keller();
//Aufbau des Kellers k
for (int i=1; i<= 10; i++){
k.push(new Integer(i));
}
ausgeben();
while (!k.isEmpty()){
System.out.println(k.top());
k.pop();
}
}
public static void main (String[] args) {
new KellerA2();
}
}
|
|
Wie die
'Wiederholung der Ausgabe' zeigt, besitzt der Keller nach der Ausgabe zwar
den gleichen Inhalt, die Reihenfolge allerdings ist umgekehrt, das
ursprünglich zuletzt eingegebene Element, das sich im Originalkeller ganz
'oben' befindet, ist nach der Ausgabe ganz 'unten' eingekellert.
10
9
8
7
6
5
4
3
2
1
1
2
3
4
5
6
7
8
9
10
|
Aufgabe 4
Download:
KellerA3.java |
Gegenüber
KellerA2 wird lediglich die Methode
ausgeben()
verändert. Anstelle der Schleife setzen wir eine rekursive Methode
ausgeben(). Beim rekursiven
Abstieg werden die Elemente aus dem Keller ausgegeben und in ein
Object-ELement
gespeichert. Beim rekursiven Aufstieg dann werden die Elemente wieder auf
den Keller gelegt. Da dies in umgekehrter Reihenfolge geschieht, das
zuletzt aus dem Keller geholte Element wird wieder als erstes
eingekellert, enthält der Keller seine alten Elemente wieder in der
ursprünglichen Reihenfolge. Man beachte, dass man ohne einen
spezifizierten zweiten Keller auskommt. Tatsächlich müssen die im Laufe
des rekursiven Abstiegs erzeugten
Object-Elemente
verwaltet werden. Die VM von Java legt diese Objekte auf einen eigenen
Stack (= Keller). private static void ausgeben(){
if(!k.isEmpty()){
Object e = k.top();
System.out.println(e);
k.pop();
ausgeben();
k.push(e);
}
}
|
zu |
31.7
Liste vom Typ FIFO |
zur
Startseite |
www.pohlig.de (C)
MPohlig 2006 |