Vererbung Ableitung der Klasse Exception, Überschreiben ererbter Konstruktoren

McHorst

Mitglied
Hallo Leute,
ich bin ein Anfänger und habe als Aufgabe ein Buch selbständig durchzuarbeiten. Dazu gehört die Lösung aller im Buch befindlichen Aufgaben.
Ich scheitere am Kapitel Exceptions. Ich habe bereits Google gefragt, im Forum gesucht und mein Buch zurate gezogen und jetzt möchte ich um eure Hilfe bitten.

Damit ihr Kontext habt hier die Aufgabenstellung:

Aufgabe 2
Erstellen Sie im Package gui09 des Projekts JavaUebung09 ein Programm zur Eingabe einer Uhrzeit. Geben Sie dem Frame den Namen Uhrzeit.
Abbildung 9.8 Programm mit Uhrzeiteingabe
Mit dem Übernehmen der eingetragenen Uhrzeit soll der Text »Ihre Uhrzeit ist xx:yy
Uhr!« als Labeltext ausgegeben werden. Als Reaktion auf eine NmberFormatException soll als Labeltext »Ungültige Uhrzeit!« ausgegeben werden.

Aufgabe 3
Erweitern Sie das Programm Uhrzeit aus Aufgabe 2 so, dass bei einer Stundenangabe
kleiner 0 und größer 23 und bei einer Minutenangabe kleiner 0 und größer 59 ebenfalls eine NumberFormatException ausgelöst wird.

Aufgabe 4
Erweitern Sie das Programm Uhrzeit aus Aufgabe 3 so, dass bei einer Stundenangabe
kleiner 0 oder größer 23 und bei einer Minutenangabe kleiner 0 oder größer 59 eine
genauere Fehlerangabe gemacht wird. Ist die Stundenangabe nicht im gültigen Wertebereich, soll »Ungültige Stundenangabe!« bzw. bei falscher Minutenangabe »Ungültige Minutenangabe!« als Labeltext ausgegeben werden.

Hinweis
Erstellen Sie zunächst im Package gui09 eine neue Klasse UhrzeitFormatException, die von der Klasse Exception abgeleitet ist. Überschreiben Sie nur die beiden ererbten Konstruktoren mit und ohne Parameter. Anschließend können Sie zwei getrennte catch-Blöcke für Werte außerhalb des gültigen Wertebereichs für Stunden und Minuten und für allgemeinere Fehler (NumberFormatExceptions) definieren.

Wirklich knackig wird für mich der Teil in Aufgabe 4 und im Abschnitt Hinweis. Ich habe es hinbekommen die GUI wie in Aufgabe 2 und 3 gewünscht zu erstellen. Die gibt auch schon eine Exception aus. Schwieirg wird für mich die Aufgabe 4. Ich soll nun eine eigene Klasse erstellen, die soll von Exception erben und die beiden geerbten Konstruktoren sollen überschrieben werden. Anschließend soll die gewünschte Ausgabe durch Exception realisiert werden.

Also was ich theoretisch tun soll weiß ich nun.
Ich will mir wirklich nicht die Arbeit von euch abnehmen lassen, aber ich trete schon über eine Woche auf der Stelle und brauch mal wieder ein Erfolgserlebnis.

Leider ist meine UhrzeitException.java noch leer.

package gui09;

public class UhrzeitFormatException extends Exception {

}

Ich weiß gar nicht wo ich anfangen soll. Braucht ihr noch irgendwas? Ich könnte den Quelltext der Applikation mit GUI posten, aber der Post ist schon so lang und eigentlich trägt meiner Einschätzung nach der ja gar nichts zur Lösung bei.

Könnt ihr helfen?

Vielen Dank,

Gruß McHorst
 

stg

Top Contributor
Konstruktoren werden nicht vererbt und können auch nicht überschrieben werden. Allenfalls können sie überladen werden.
Welche sollen denn die "beiden" Konstruktoren sein? Die Klasse Exception besitzt jedenfalls mehr als 2....

Mal abgesehen davon, dass da in der Aufgabenstellung augenscheinlich schon Blödsinn steht, würde ich dir von dem Buch, welches du gerade durcharbeitest, abraten, wenn dort tatsächlich Exceptions zur Programmsteuerung empfohlen werden :eek:

Zur Problemlösung: so wie ich das verstehe, sollst du einfach je nach Fall der Exception eine unterschiedliche message mitgeben.
 

McHorst

Mitglied
Ja, ich schließe mich dir an, das Buch ist murks. Das scheint auch allen Beteiligten klar zu sein, aber meine Ausbilder beantworten dies damit, dass ich mir mal ein Fleißkärtchen verdienen soll, indem ich mich da durchbeiße, wo ich doch so weit gekommen bin. Mir fehlen jetzt noch vier Kapitel und rund 30 Aufgaben, dann lass ich das Buch und den Verleger hinter mir.

Zum eigentlichen Problem: Ich denke ich soll zwei Exceptions überladen, und zwar die NumberFormatException als Reaktion auf eine völlig Falsche Eingabe wie z.B. Buchstaben statt zahlen. Das soll dann auch zu sehen sein in einem Label z.B. mit dem Text z.B. "Bitte geben Sie eine gültiges Zahlenformat ein". Außerdem sollen nur bestimmte Stunden- und Minutenangaben (h<23, m<59) erlaubt sein. Andernfalls soll ebenfalls mit einer NumberFormatException reagiert werden, diese soll aber spezifisch einen anderen Labeltext anzeigen wie z.B. "Geben Sie ein gültiges Uhrzeitformat ein".

Ich hoffe ich bin da soweit auf Kurs. Nur wie mach ich das jetzt ganz praktisch? Als ich das, wie in in den vorherigen Aufgaben gefordert, alles innerhalb der Main Methode gemacht habe, war es halb so wild. Mit try catch und einer if-Abfrage kam ich zurecht, wobei ich glaube hier eine if-Abfrage nicht gefordert war. Ok, ich hatte zwar gemogelt, aber zumindest die gewünschte Ausgabe erhalten.
Wie lager ich das ganze jetzt in eine eigene Klasse UhrzeitException.java aus?

Vielen Dank, Gruß McHorst
 
Zuletzt bearbeitet:

stg

Top Contributor
Irgendwo in deinem Code wirst du ja eine Prüdung der Eingabedaten vornehmen. Dort schmeißt du nun deine Exception
Code:
WENN STUNDE kleiner 0 oder größer 23
   THROW new UhrzeitFormatException("Ungültige Stundenangabe!")
SONST WENN ....
(Dafür brauch deine Klasse UrhzeitFormatException natürlich einen passenden Konstruktor. )

Wenn du beim Client nun die Exception fängst, sollst du die zuvor gesetzte Meldung wieder auslesen und in der UI darstellen.
 

McHorst

Mitglied
Ja, genau. Sowas habe ich ja auch gemacht, das spielte sich bisher in meinem Programm mit GUI ab.

Java:
try {

                    stunden = Integer.parseInt(tfStunden.getText());
                    minuten = Integer.parseInt(tfMinuten.getText());

                    if (stunden > 23 || stunden < 0 || minuten > 59 || minuten < 0) {
                      
                        throw new NumberFormatException();
                    } else {
                        lblUhrzeit.setText(stunden + " : " + minuten + " Uhr");
                    }

                } catch (NumberFormatException e1) {

                    lblUhrzeit.setText("Bitte eine gültige Uhrzeit eingeben");
                              
                }


So wie ich die Aufgabe verstehe brauche ich jetzt aber eine Klasse UhrzeitFormatEception.java in der sich das ganze abspielt. Diese soll dann die normale NumberFormatException überladen und auf die gewünschte Art reagieren. Dazu muss ich ja aber irgendwie die beiden Programmteile zusammenspielen lassen. Sodass, dann das Programm Uhrzeit.java das Exception Handling, dass ich in UhrzeitFormatException.java definiert habe, übernimmt.

So denke ich mir das zumindest, ob und wie das funktioniert ist noch nicht ganz klar, sollte aber eigentlich kein großer Akt sein.

Nachtrag: Da mir aber offensichtlich das grundlegende Verständnis zu Konstruktoren und zu Vererbung fehlt, sollte ich vielleicht erneut einige Kapitel zurück blättern, um mir zu vergegenwärtigen wie das geht. So weit bin ich schon mal, das geht nur leider nicht von heut auf morgen.

Vielen Dank, Gruß McHorst
 

StarSheriff

Mitglied
Du bist ja schon fast am Ziel:

Code:
public class UhrzeitEingabe
{
    public static void main(String[] args)
    {

        UhrzeitEingabe uhrzeit = new UhrzeitEingabe();
        try
        {
            uhrzeit.check("4", "30");
            uhrzeit.check("hor", "st");
        }
        catch (UhrzeitFormatException ufe)
        {
            System.out.println(ufe.getMessage());
        }
        catch (NumberFormatException nfe)
        {
            System.out.println("gibt halt zahlen ein");
        }

    }

    private void check(String stundeAusEingabeGUI, String minuteAusEingabeGui) throws UhrzeitFormatException,
            NumberFormatException
    {
        int stunde = Integer.parseInt(stundeAusEingabeGUI);
        int minute = Integer.parseInt(minuteAusEingabeGui);

        if (stunde < 0 || stunde > 23)
        {
            throw new UhrzeitFormatException("stunde is falsch");
        }

        if (minute < 0 || minute > 59)
        {
            throw new UhrzeitFormatException("minute is falsch");
        }
        else
        {
            System.out.println(stunde + ":" + minute);
        }
    }

}
 

McHorst

Mitglied
Jau StarSherriff,

danke schon einmal für den Versuch dem Code Sinn einzuhauchen. Ist dir gelungen. Erscheint mir strukturiert und ich versuche gerade nachzuvollziehen was dort passiert. Ich werde mich heute nach dem Feierabend nochmal mit einem Bekannten zusammen setzen und das ganze genauer unter die Lupe nehmen. Ich verstehe, dass wenn ich deinen Quellcode einfüge eine Zusammenarbeit zwischen deinem Code und der UhrzeitFormatException.java statt findet. Ich wurde von der IDE Aufgefordert einen Constructor in UhrzeitFormatException.java zu erstellen. Doppelklick und Autofill haben den Rest erledigt. Dein Programm funktioniert. Das ganze versuche ich nachzuvollziehen und an mein GUI Programm anzupassen. Das sollte mir dank deiner Hilfe gelingen. Falls nicht, mach ich nochmal auf mich aufmerksam.

Vielen Dank, Gruß McHorst
 

StarSheriff

Mitglied
Ich wurde von der IDE Aufgefordert einen Constructor in UhrzeitFormatException.java zu erstellen. Doppelklick und Autofill haben den Rest erledigt.

Das ist die Anforderung/Hinweis aus der Aufgabenstellung, ich dachte das hättest du schon :)
Erstellen Sie zunächst im Package gui09 eine neue Klasse UhrzeitFormatException, die von der Klasse Exception abgeleitet ist. Überschreiben Sie nur die beiden ererbten Konstruktoren mit und ohne Parameter
 

McHorst

Mitglied
Ich war ein paar Tage beruflich im Ausland, und zack, beinahe schon wieder ein Monat rum: Jetzt hock ich wieder im Büro und muss erneut darüber brüten. Ich fang quasi bei null wieder an. Puh, was man so alles in einem Monat vergessen kann... Zum glück habe ich diesen Thread hier als Wiedereinstieg. Danke an alle
 

Neue Themen


Oben