BlueJ - A03 - Lösungsdiskussion

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

  • BlueJ - A03 - Lösungsdiskussion

    Hi Java/BlueJ-Interessierte

    Mich interessiert was Ihr für Lösungsansatze für die folgenden Aufgaben habt:

    (Hinweis: Bitte dokumentieren Sie alle Sourcecodes mit Kommentaren im Programm! Um ist die Nachvollziehbarkeit des Programms für andere User zu ermöglich.)

    Greetz cruiser_s

    Aufgabe 1: Unverkaufte Posten ausgeben

    Quellcode

    1. import java.util.*;
    2. /**
    3. * Ein einfaches Modell einer Auktion.
    4. * Ein Exemplar dieser Klasse hält eine Liste von Posten,
    5. * die beliebig lang werden kann.
    6. * @author David J. Barnes und Michael Kölling.
    7. * @version 2003.03.02
    8. */
    9. public class Auktion
    10. {
    11. // eine Liste der Posten dieser Auktion
    12. private ArrayList postenliste;
    13. // die Nummer, die an den nächsten Posten vergeben wird,
    14. // der für diese Auktion angemeldet wird.
    15. private int naechstePostennummer;
    16. /**
    17. * Erzeuge eine neue Auktion.
    18. */
    19. public Auktion()
    20. {
    21. postenliste = new ArrayList();
    22. naechstePostennummer = 1;
    23. }
    24. /**
    25. * Melde einen Posten für diese Auktion an.
    26. * Posten können nur über diese Operation in eine
    27. * Auktion eingebracht werden.
    28. * @param beschreibung die Beschreibung des Postens.
    29. */
    30. public void postenAnmelden(String beschreibung)
    31. {
    32. postenliste.add(new Posten(naechstePostennummer, beschreibung));
    33. naechstePostennummer++;
    34. }
    35. /**
    36. * Zeige eine komplette Liste der Postennummern mit
    37. * Postenbeschreibungen für diese Auktion. Zeige auch
    38. * die aktuellen Höchstgebote.
    39. */
    40. public void zeigePostenliste()
    41. {
    42. Iterator it = postenliste.iterator();
    43. while(it.hasNext()) {
    44. Posten posten = (Posten) it.next();
    45. System.out.println(posten.gibNummer() + ": " +
    46. posten.gibBeschreibung());
    47. // Informationen über Höchstgebote anzeigen.
    48. Gebot hoechstesGebot = posten.gibHoechstesGebot();
    49. if(hoechstesGebot != null) {
    50. System.out.println(" Gebot: " +
    51. hoechstesGebot.gibHoehe());
    52. }
    53. else {
    54. System.out.println(" (kein Gebot)");
    55. }
    56. }
    57. }
    58. /**
    59. * Liefere den Posten mit der angegebenen Nummer.
    60. * Liefere 'null', wenn ein Posten mit dieser Nummer
    61. * nicht existiert.
    62. * @param nummer die Nummer des Postens, der geliefert
    63. * werden soll.
    64. */
    65. public Posten gibPosten(int nummer)
    66. {
    67. if((nummer >= 1) && (nummer < naechstePostennummer)) {
    68. // die Nummer scheint gültig zu sein.
    69. Posten gewaehlterPosten = (Posten) postenliste.get(nummer-1);
    70. // ein Sicherheitscheck, ob wir auch den richtigen
    71. // Posten haben:
    72. if(gewaehlterPosten.gibNummer() != nummer) {
    73. System.out.println("Interner Fehler: " +
    74. "falsche Postennummer. " +
    75. "Number: " + nummer);
    76. }
    77. return gewaehlterPosten;
    78. }
    79. else {
    80. System.out.println("Einen Posten mit der Nummer: " + nummer +
    81. " gibt es nicht.");
    82. return null;
    83. }
    84. }
    85. }
    Alles anzeigen



    Fügen Sie der Klasse Auktion eine Methode gibUnverkaufte hinzu, die über folgende Signatur verfügt:

    Quellcode

    1. public ArrayList gibUnverkaufte();


    Diese Methode soll über das Datenfeld posten iterieren und unverkaufte Posten in einer neuen lokalen ArrayList-Variablen ablegen. Am Ende soll diese Liste als Ergebnis der Methode zurückgegeben
    werden. (Übung 4.15 aus dem Buch: Java lernen mit BlueJ)

    Aufgabe 2:

    Fügen Sie der Klasse Auktion eine Methode mit folgender Signatur hinzu:

    Quellcode

    1. /**
    2. * Entferne den Posten mit der angegebenen Postennummer.
    3. * @param nummer Die Nummer des Postens, der entfernt werden soll.
    4. * @return Den Posten mit der gegebenen Nummer, oder null, falls
    5. * es einen solchen Posten nicht gibt.
    6. */
    7. public Posten entfernePosten(int nummer)


    Diese Methode soll nicht davon ausgehen, dass ein Posten mit einer bestimmten Nummer an einer bestimmten Position innerhalb der Liste abgelegt ist. (Übung 4.18 aus dem Buch)

    Aufgabe 3:

    Quellcode

    1. /**
    2. * Eine Klasse, die das Protokoll eines Web-Servers
    3. * in Hinsicht auf Zugriffe pro Stunde auswertet.
    4. *
    5. * @author David J. Barnes und Michael Kölling.
    6. * @version 2003.05.17
    7. */
    8. public class ProtokollAuswerter
    9. {
    10. // Hier werden die Zugriffe für die Stunden gehalten
    11. private int[] zugriffeInStunde;
    12. // Verwendung eines LogdateiLesers
    13. private LogdateiLeser leser;
    14. /**
    15. * Erzeuge ein Exemplar, das die Zugriffe in den
    16. * Stunden eines Tages zählt.
    17. */
    18. public ProtokollAuswerter()
    19. {
    20. // das Array-Objekt erzeugen, das die Zugriffe
    21. // in den einzelnen Stunden eines Tages zählt.
    22. zugriffeInStunde = new int[24];
    23. // Den Leser für die Logdatei erzeugen.
    24. leser = new LogdateiLeser();
    25. }
    26. /**
    27. * Analysiere die in der Logdatei erfassten Zugriffsdaten.
    28. */
    29. public void analysiereStundendaten()
    30. {
    31. while(leser.hatWeitereEintraege()) {
    32. Logeintrag eintrag = leser.naechsterEintrag();
    33. int stunde = eintrag.gibStunde();
    34. zugriffeInStunde[stunde]++;
    35. }
    36. }
    37. /**
    38. * Gib die Anzahl der Zugriffe in den Stunden eines
    39. * Tages nach Stunden sortiert auf der Konsole aus.
    40. * Diese Werte sollten zuerst mit einem Aufruf von
    41. * 'analysiereStundendaten' berechnet werden.
    42. */
    43. public void stundendatenAusgeben()
    44. {
    45. System.out.println("Stunde: Zugriffe");
    46. for(int stunde = 0; stunde < zugriffeInStunde.length; stunde++) {
    47. System.out.println(stunde + ": " + zugriffeInStunde[stunde]);
    48. }
    49. }
    50. /**
    51. * Gib die Zeilen der Logdatei auf der Konsole aus.
    52. */
    53. public void logdateiAusgeben()
    54. {
    55. leser.datenAusgeben();
    56. }
    57. }
    Alles anzeigen


    Fügen Sie im Projekt Weblog-Auswertung der Klasse ProtokollAuswerter eine Methode ruhigsteStunde hinzu, welche die Stunde mit den wenigsten Zugriffen liefern soll. (Übung 4.31 aus dem Buch)

    Aufgabe 4:

    Quellcode

    1. import java.util.ArrayList;
    2. /**
    3. * Eine Klasse zur Verwaltung von beliebig langen Notizlisten.
    4. * Notizen sind nummeriert, um durch einen Benutzer referenziert
    5. * werden zu können.
    6. * In dieser Version starten die Notiznummern bei 0.
    7. *
    8. * @author David J. Barnes and Michael Kolling.
    9. * @version 2003.04.15
    10. */
    11. public class Notizbuch
    12. {
    13. // Speicher für eine beliebige Anzahl an Notizen.
    14. private ArrayList notizen;
    15. /**
    16. * Führe die Initialisierungen durch, die für ein Notizbuch
    17. * notwendig sind.
    18. */
    19. public Notizbuch()
    20. {
    21. notizen = new ArrayList();
    22. }
    23. /**
    24. * Speichere eine neue Notiz in diesem Notizbuch.
    25. * @param notiz die zu speichernde Notiz.
    26. */
    27. public void speichereNotiz(String notiz)
    28. {
    29. notizen.add(notiz);
    30. }
    31. /**
    32. * @return die Anzahl der Notizen in diesem Notizbuch.
    33. */
    34. public int anzahlNotizen()
    35. {
    36. return notizen.size();
    37. }
    38. /**
    39. * Zeige eine Notiz.
    40. * @param notiznummer die Nummer der Notiz, die gezeigt werden soll.
    41. */
    42. public void zeigeNotiz(int notiznummer)
    43. {
    44. if(notiznummer < 0) {
    45. // Keine gültige Nummer, nichts zu tun.
    46. }
    47. else if(notiznummer < anzahlNotizen()) {
    48. // Die Nummer ist gültig, wir können die Notiz ausgeben.
    49. System.out.println(notizen.get(notiznummer));
    50. }
    51. else {
    52. // Keine gültige Nummer, nichts zu tun.
    53. }
    54. }
    55. }
    Alles anzeigen



    Java bietet einen weiteren Schleifentyp an: do-while-Schleife. Finden Sie heraus, wie diese Schleife funktioniert und beschreiben Sie es. Was ist der wesentliche Unterschied zu den anderen Schleifen? Schreiben Sie zusätzlich die Methode notizenAusgeben im Projekt Notizbuch so um, dass sie eine do-while-Schleife benutzt.

    Aufgabe 5: Sortierte Ausgabe im Projekt Auktion

    Erweitern Sie das Projekt Auktion so, dass die Ausgabe der Posten sortiert erfolgt (genauer: alphabetisch aufsteigend). Die Ausgabe der Posten soll dabei alle Details der Posten berücksichtigen.