Bluejproblem (Objektinteraktion Heizkessel & Oeltank)

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

  • Bluejproblem (Objektinteraktion Heizkessel & Oeltank)

    salute,


    im rahmen meines studiums der digitalen medien muss man leider auch progammieren können und ich finde es aktuell nicht so prickelnd, also wenn jemand diesbzgl. ahnung hat, möge er sich doch konkret an mich wenden.

    Aktuell geht es um dies hier: java bluej



    16. Erweitern Sie das Projekt Heizungssteuerung der Aufgabe 1 um eine Klasse Heizkessel.

    Der Heizkessel soll die Außentemperatur und die gewünschte Raumtemperatur kennen. Er soll Öl
    verbrauchen, das er dem Öltank entnimmt. Der Ölverbrauch in einer Zeiteinheit errechne sich zu
    Ölverbrauch = (Raumtemperatur -Außentemperatur)/35.0. Bei einer Außentemperatur größer als 16oC
    soll die Steuerung erkennen, dass es Sommer ist. Im Sommer wird nicht geheizt.

    Die Klasse soll Datenfelder für Außentemperatur, Raumtemperatur, den Zustand Sommer und den
    Hersteller und Typ des Heizkessels haben. Objekte der Klasse müssen den zugehörigen
    Öltank kennen. Dies muss der Konstruktor sicherstellen.

    Es werden Methoden zum Setzen und Ablesen der Temperaturen und zum Abfragen der Herstellerinfos
    von Heizkessel und Öltank gebraucht. Außerdem wird eine sondierende Methode gebraucht, mit
    deren Hilfe man abfragen kann, ob der Heizkessel erkannt hat, dass es Sommer ist.

    Schließlich braucht der Kessel eine Methode heizen() welche den Kessel für eine Zeiteinheit
    betreibt. Dabei soll der Heizkessel heizen und dabei die bestehenden Temperaturen beachten. Es soll
    die notwendige Menge Öl aus dem Öltank entnommen werden. Falls der Öltank leer sein sollte, muss
    der Heizkessel eine (eigene) Störmeldung erzeugen.

    a. Erstellen Sie die Klasse Heizkessel. (Orientierung: Projekte Zeitanzeige und MailSystem)

    b. Verändern Sie die Klasse Oeltank, so dass die Ölmengen gebrochenzahlig (Typ double)
    abgehandelt werden.

    c. Testen Sie alle Funktionen ausgiebig an Instanzen der Klasse. Nutzen Sie dabei auch den
    Debugger.


    mein beginn war jetzt folgender:

    Quellcode

    1. public class Heizkessel
    2. {
    3. // Außentemperatur
    4. private double außentemperatur;
    5. // Gewünschte Raumtemperatur
    6. private double raumtemperatur;
    7. // Hersteller und Typ des Kessels
    8. private String herstellerkessel;
    9. private String typkessel;
    10. //Zustand Sommer
    11. private boolean sommer;
    12. // Der Oeltank, der befüllt wird
    13. private Oeltank oeltank;
    14. /** Verbindung zum Oeltank
    15. *
    16. */
    17. public Heizkessel(Oeltank oeltank)
    18. {
    19. this.oeltank = oeltank;
    20. }
    21. /**
    22. * Konstruktor für Objekte der Klasse Heizkessel
    23. */
    24. public Heizkessel(String herstellerk, String typ)
    25. {
    26. // Instanzvariable initialisieren
    27. herstellerkessel = herstellerk;
    28. typkessel = typ;
    29. außentemperatur = 0;
    30. raumtemperatur = 0;
    31. sommer = außentemperatur > 16;
    32. }
    33. /**
    34. * Ein Beispiel einer Methode - ersetzen Sie diesen Kommentar mit Ihrem eigenen
    35. *
    36. * @param y ein Beispielparameter für eine Methode
    37. * @return die Summe aus x und y
    38. */
    39. public String infohersteller()
    40. {
    41. return herstellerkessel;
    42. }
    43. public String infotyp()
    44. {
    45. return typkessel;
    46. }
    47. public double außentemperatur(double eingabe)
    48. {
    49. außentemperatur = außentemperatur + eingabe;
    50. return außentemperatur;
    51. }
    52. public double raumtemperatur(double raumtemp)
    53. {
    54. raumtemperatur = raumtemperatur + raumtemp;
    55. return raumtemperatur;
    56. }
    57. public boolean sommer()
    58. {
    59. sommer = außentemperatur > 16;
    60. return sommer;
    61. }
    62. public void heizen()
    63. {
    64. if boolean sommer = false
    65. {
    66. System.out.println ("Es ist zu warm")
    67. }
    68. else
    69. {
    Alles anzeigen



    //edit by vince - Syntax Highlighting eingefügt - bitte beim nächsten mal beachten.
  • Da feht doch was, oder? Das else wirst du doch noch zuende geschreiben haben. Vielleicht hat vince es auch kaputtverschönert. :)

    Generell:
    Wenn es schon deutsch sein muss, solltest du auf deutsche Sonderzeichen verzichten öäüßÄÖÜ
    Du willst sicher nicht, dass dein Programm nicht funktioniert, weil auf einem anderen Rechner ein anderes Encoding verwendet wird, oder?


    Attribute:
    - Sehen soweit gut aus.
    - Das Attribut sommer ist Quatsch, es ist redundant zum Attribut außentemperatur und wird somit nicht benötigt. Allerdings wird es explizit von der Aufgabenstellung verlangt. Deswegen ist es richtig, sollte aber nicht zum Vorbild genommen werden.

    Konsturktoren:
    - Hier baust du Mist.
    - Die Konsturktoren rufen sich nicht gegenseitig auf. Das heist, dass bei einem Aufruf von

    Quellcode

    1. public Heizkessel(Oeltank oeltank)

    herstellerkessel und typkessel auf null gesetzt bleiben.
    Rufst du stattdessen

    Quellcode

    1. public Heizkessel(String herstellerk, String typ)

    auf, wird der oeltank nicht gesetzt und bleibt null;
    - Du braucht keine zwei Konstruktoren, sondern einen, dem du den hersteller, typ und oeltank übergibst.

    Methoden:
    - Das ist echt wirr was du da tust. Beispiel:

    Quellcode

    1. public double außentemperatur(double eingabe)
    2. {
    3. außentemperatur = außentemperatur + eingabe;
    4. return außentemperatur;
    5. }

    1. Warum addierst du eine Außentemperatur? Du solltest sie einfach setzen.
    2. Der Methodenname sollte ausdrücken was die Methode tut. Üblich sind Prefixes wie: get set add is
    3. Hier ein Beispiel:

    Quellcode

    1. public void setAussentemperatur(double eingabe)
    2. {
    3. aussentemperatur = eingabe;
    4. }
    5. public double getAussentemperatur()
    6. {
    7. return aussentemperatur;
    8. }
    9. // nur wenn du es WIRKLICH brauchen solltest:
    10. public void addAussentemperatur(double eingabe)
    11. {
    12. aussentemperatur += eingabe; // das gleiche wie: aussentemperatur = aussentemperatur + eingabe;
    13. }
    Alles anzeigen

    Vergiss hier nicht in der add/set-Methode den sommer-Wert neu zu setzen.

    Die Methode heizen():
    So wie ich die Aufgabenstellung lese, soll hier eine Exception geworfen werden, wenn der Tank leer ist. Dafür musst du eine eigene Klasse schreiben, die von Exception erbt.
    Exception werfen:

    Quellcode

    1. throw new MyException("Tank ist leer");

    Der Methodenkopf muss die Exception noch kennen:

    Quellcode

    1. public void heizen() throws MyException

    Mehr dazu hier: openbook.galileodesign.de/javainsel8/javainsel_08_001.htm
  • Ich glaube nicht, aber ich habe noch nie probiert, mit mit Sonderzeichen zu programmieren. :)

    Auf jeden Fall solltest du rausfinden welches Encoding deine Java-Dateien überhaupt haben. Auf einem Windows-System wahrscheinlich Windows-1250 ansonsten UTF-8.

    Die Buchstaben, die auch im Englischen verwendet werden, sind in verschiedenen Encodings häufig gleich codiert. So zeigen einem oft nur die Umlaute, dass man ein Problem hat. :)