You are not logged in.

  • Login

Dear visitor, welcome to Coder Forum. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

1

Thursday, November 24th 2011, 3:02pm

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:

Java Quellcode

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



//edit by vince - Syntax Highlighting eingefügt - bitte beim nächsten mal beachten.

2

Thursday, November 24th 2011, 7:11pm

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

Java Quellcode

1
public Heizkessel(Oeltank oeltank)

herstellerkessel und typkessel auf null gesetzt bleiben.
Rufst du stattdessen

Java 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:

Java Quellcode

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

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:

Java Quellcode

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

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:

Java Quellcode

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

Der Methodenkopf muss die Exception noch kennen:

Java Quellcode

1
public void heizen() throws MyException

Mehr dazu hier: http://openbook.galileodesign.de/javains…nsel_08_001.htm

3

Thursday, November 24th 2011, 10:22pm

Quoted from ""Hafner""

Du willst sicher nicht, dass dein Programm nicht funktioniert, weil auf einem anderen Rechner ein anderes Encoding verwendet wird, oder?

gilt das auch für (Zwischen-)Kompilate? kann das hier schwer nachstellen

4

Thursday, November 24th 2011, 10:55pm

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. :-)

Similar threads

Social bookmarks