Lösung der Nachklausur Pr25 SS'01


Aufgabe 1.

public class ErwWarteschlange extends WarteschlangeListe {
   public int anzahl() {
     Knoten kn = juengster; int anz = 0;
     while (kn != null) {
        anz++; kn = kn.verbindung; }
     return anz; } }

Aufgabe 2:

public class FarbmengeMitSicherung {
   private FarbmengeImpl sicherung, menge = new FarbmengeImpl();
   public void eintragen(Farbe farbe) {
     sicherung = (FarbmengeImpl)menge.clone();
     menge.eintragen(farbe); }
   public void entfernen(Farbe farbe) {
     sicherung = (FarbmengeImpl)menge.clone();
     menge.entfernen(farbe); }
   public boolean vorhanden(Farbe farbe) {
     return menge.vorhanden(farbe); }
   public void wiederherstellen() {
     menge = sicherung; }
// boolean-Ergebnis kann besagen, ob wiederherstellen möglich war

Aufgabe 3:

import javax.swing.*; import java.awt.*; import java.awt.event.*;
public class DreiBeschriftungen extends JApplet {
   private JButton knopf = new JButton("Click!");
   private JLabel l1 = new JLabel("0"), l2 = new JLabel("A"),
     l3 = new JLabel("Color");
   private int zaehler = 0;
   private char buchstabe = 'A';
   public void init() {
     Container grundflaeche = getContentPane();
     grundflaeche.setLayout(new FlowLayout()); grundflaeche.add(knopf);
    grundflaeche.add(l1); grundflaeche.add(l2); grundflaeche.add(l3);
     knopf.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent ereignis) {
           zaehler++;
           l1.setText("" + zaehler);
           if (buchstabe == 'Z')
             buchstabe = 'A';
           else
             buchstabe++;
           l2.setText("" + buchstabe);
           l3.setBackground(zaehler % 2 == 0 ? Color.red : Color.green); }    }); } }

Aufgabe 4:

·       Von einer Klasse kann ein Objekt nur dann erzeugt werden, wenn sie einen (impliziten oder expliziten) public-Konstruktor enthält.

Falsch: In der Klasse selbst oder in einer Unterklasse können Objekte auch ohne public-Konstruktor erzeugt werden

·       In Java werden Parameterobjekte immer „call by reference“ übergeben, während in C++ nur, wenn der Programmierer dies explizit angibt.

Richtig: & in C++.

·       C++-Objekte sind typischerweise größer als Java-Objekte. In Java werden dafür typischerweise mehr Objekte erzeugt.

Richtig: In C++ gibt es eingebettete Objekte.

·       C++-Klassen können Operatoren enthalten, während Java-Klassen nie.

Falsch: String in Java enthält den Operator +

·       Das dynamische Binden findet in Java zur Laufzeit, in C++ vor der Laufzeit statt.

Falsch: Ein .dll wird auch in C++ dynamisch gebunden

·       Ein new-Aufruf in einem Destruktor produziert immer eine Speicherleiche.

Falsch: Nicht, wenn das Objekt anschließend mit delete gelöscht wird.

·       Aus einem Sack können enthaltene Elemente in beliebiger Reihenfolge entfernt werden, während aus einem Stapel nicht.

Richtig: Sack.entfernen() hat einen Parameter, Stapel.entfernen() hat keinen Parameter

·       Der Zugriff auf das length-te Element einer Reihung löst immer eine Ausnahme aus.

Richtig: in Java – Reihungen werden ab 0 indiziert

Falsch: in C++ – Reihungszugriffe lösen keine Ausnahmen aus.