Feedback bitte: Klausurfrage Notsignalgeber

morry329

Mitglied
hallo zusammen,

ich komme eine Java-Aufgaben nicht weiter, deswegen wäre es super wenn jemand mein Code reingucken und etwa Feedback hinterlassen könnte.
Es geht um die Klausuraufgabe von Uni Halle in 2013, und ich habe auf folgende Weise ausprogrammiert:
Java:
package unihalle2013;

public class Notsignalgeber {
        private int Voralarm;
        private int Hauptalarm;

    Notsignalgeber(int voralarm, int hauptalarm){
        this.Voralarm = voralarm;
        this.Hauptalarm = hauptalarm;

    }

    int tick(){
        System.out.println("Aufrufstärke eintippen: ");
        int alarm = new java.util.Scanner(System.in).nextInt();
        if(alarm <= 30){
            return 0;
        } else if (alarm == 50){
            return 50;
        } else if (alarm == 100){
            return 100;
        }
        return 0;
    }

    void bewegt(){
        boolean bewegung = false;
        if(bewegung){
            System.out.println("bewegt!!");
        } else {
            System.out.println("Keine Bewegung");
        }
    }
    //wie programmiert man die nächsten 30 Aufrufe, die von tick() wieder den 0 Wert liefern??
    public static void main(String[] args){
        Notsignalgeber notsig = new Notsignalgeber(30, 10);
        int lautstarke = notsig.tick();
        notsig.bewegt();

        System.out.println("der Alarm macht pause, deswegen der Wert ist: " + 0);
        //wie macht man: int variable lautstarke zu initialisieren??
    }

Die Kommentar im Code sind die Aufgabestellung, die ich nicht vollständig codieren konnte. Das Programm liefert folgender Ergebnis zurück:

Code:
Aufrufstärke eintippen:
30
Keine Bewegung
der Alarm macht pause, deswegen der Wert ist: 0

Aber ich bin mir ganz nicht sicher, ob mein Code überhaupt die Aufgabestellung erfüllt hat. Zur Info laut die ganze Aufgabestellung wie folgt:

"Programmieren Sie eine Klasse Notsignalgeber. Feuerwehrleute tragen bei Einsa ̈tzen mit Atemschutzgera ̈ten einen Notsignalgeber, der Bewegungen des Tra ̈gers registriert. Bleibt der eine gewisse Zeit (z.B. 30s) ohne Bewegung, wird ein Voralarm ausgelo ̈st (z.B. 50 dB). Ist der Tra ̈ger bei Bewustsein, wird er sich dann leicht bewegen, um den Alarm auszu- schalten. Ansonsten wird z.B. nach weiteren 10s der Hauptalarm ausgelo ̈st (100 dB). Dadurch erkennen die Kollegen die Notsituation und ko ̈nnen ggf. auch den betroffenen Feuerwehrmann leichter finden (es gibt zusa ̈tzlich noch einen optischen Alarm, den wir in dieser Aufgabe zur Vereinfachung nicht beachten).
Die Klasse Notsignalgeber soll die wesentliche Steuerungslogik enthalten. Informa- tionen u ̈ber die Bewegung und die Zeit kommen von außen (s.u.), das brauchen Sie nicht zu programmieren. Objekte der Klasse Notsignalgeber sollen einen Konstruktur und zwei Methoden haben:

  • Der Konstruktor hat zwei Parameter fu ̈r die Zeit bis zum Voralarm und die zusa ̈tz- liche Zeit bis zum Hauptalarm. Ein Aufruf ko ̈nnte so aussehen: Notsignalgeber notsig = new Notsignalgeber(30, 10);
  • Die Methode tick() (ohne Parameter) wird von einem externen Zeitgeber jede Sekunde einmal aufgerufen. Sie soll die Lautsta ̈rke des Alarms zuru ̈ckliefern (als Ru ̈ckgabewert der Methode), also 0 fu ̈r kein Alarm, 50 fu ̈r Voralarm und 100 fu ̈r Hauptalarm. Ein mo ̈glicher Aufruf ko ̈nnte so aussehen:
    int lautstaerke = notsig.tick();

    Beim oben erzeugten Objekt soll bei den ersten 30 Aufrufen der Wert 0 geliefert werden, beim 31. bis 40. Aufruf der Wert 50, und ab dem 41. Aufruf der Wert 100 (sofern nicht zwischendurch eine Bewegung festgestellt wurde).
  • Eine Methode bewegt(), die aufgerufen wird, wenn der Bewegungsmelder eine Be- wegung erkannt hat. Diese Methode hat keine Parameter und keinen Ru ̈ckgabewert. Ein mo ̈glicher Aufruf ko ̈nnte so aussehen: notsig.bewegt();

    Nachdem diese Methode aufgerufen wurde, sollen die na ̈chsten 30 Aufrufe von tick() wieder den Wert 0 liefern.
    Der Konstruktor und die beiden Methoden sollen von außen aufrufbar sein, uns zwar auch von außerhalb des Paketes. Entsprechend muß die Klasse auch von außerhalb des Paketes aus benutztbar sein. Nichts sonst darf von außen zugreifbar sein (auch nicht von anderen Klassen des gleichen Paketes aus). Sie du ̈rfen beliebige Attribute verwenden, die aber von von innerhalb dieser Klasse aus zugreifbar sein du ̈rfen. Offenbar muß man sich die Parameter des Konstruktors abspeichern, und u ̈ber die Zeit (Anzahl Aufrufe von tick()) seit dem letzten Aufruf von bewegt() Buch fu ̈hren. Wie Sie das genau machen, ist aber Ihre Entscheidung."

 

KonradN

Super-Moderator
Mitarbeiter
Also die Lösung so ist teilweise Quatsch (sorry, wenn ich es so direkt sage):

Java:
    void bewegt(){
        boolean bewegung = false;
        if(bewegung){
            System.out.println("bewegt!!");
        } else {
            System.out.println("Keine Bewegung");
        }
    }
Gibt immer "Keine Bewegung" aus.

Generell scheint es mir, dass Du die Aufgabe noch nicht wirklich verstanden hast. Spiel es doch einfach einmal durch:

Du hast einen Notsignalgeber. Wenn keine Bewegung da ist, dann soll er nach einer Zeitspanne einen Voralarm und nach einer anderen Spanne einen Hauptalarm auslösen. Damit ist klar: Es muss einen Zustand geben, der speichert, wie lange keine Bewegung gemeldet wurde.

tick() wird jede Sekunde aufgerufen - das scheint also für so einen Fortschritt zu taugen. Und natürlich kommt da keine Benutzereingabe rein! Wo steht etwas von einer Eingabe durch den Benutzer?

Und dann kannst Du Dir überlegen, was passieren muss, wenn bewegt() aufgerufen wird.

Spiele es einfach einmal ein bisschen durch!

Also ganz wichtig: Ehe Du irgendwas implementierst oder auch nur an die Implementation denkst: Spiel es mindestens in Gedanken durch! Erfasse die Anforderungen! Was soll da genau passieren? Und dann kannst Du Dir überlegen, wie Du das abbilden kannst!
 

Neue Themen


Oben