Ausnahmen

baker333

Bekanntes Mitglied
Hi,

ich hänge gerade an folgendem Code:

Java:
Gegeben sei die folgende Klassendeklaration:

public class GefaehrlicheKlasse {
    public static void a(int x) throws Exception {
        b(x);
    }
    public static void b(int x) throws Exception {
        if (x < 10) {
            d(x, x);
        } else {
            try {
                c(-x);
            } catch (RuntimeException e) {
                throw new IllegalArgumentException();
            }
        }
    }
    private static void c(int i) throws Exception {
        try {
            e(2 * i, i - i);
        } catch (Exception e) {
            throw new Exception("Fehler!");
        }
    }
    private static int e(int i, int j) {
        return i / j;
    }
    private static void d(int x, int i) {
        int[] f = new int[i];
        for (int k = 0; k <= x; k++) {
            f[k] = i;
        }
    }
}

Welche Ausnahme wird an den Aufrufer von GefaehrlicheKlasse.a(10) weitergereicht?

Wenn ich das richtig sehe, wird c(-10) aufgerufen. Aber wann kommt es dann zum Fehler?

LG
 
K

kneitzel

Gast
Was berechnet denn c(-10)? Was passiert denn da weiter?
Und wenn du es nicht weißt: warum probierst du es nicht einfach aus?
 
K

kneitzel

Gast
Bleibt der zweite Ratschlag: Probier es doch einmal aus! Und schau, wo Du den Denkfehler hast....
Oder falls Du wirklich ohne ausprobieren drauf kommen willst: was ist i - i?
 

baker333

Bekanntes Mitglied
Das Problem ist, wenn ich den Code bei Eclipse ausprobieren möchte, dann kommt immer ein Fehler, egal welchen Wert ich für die Methode eingebe. Bei einer Zahl kleines als 10 sollte ja eigentlich keine Exception auftreten.
 
K

kneitzel

Gast
Ok, dann hast du schon mal erkannt, was das Problem da ist.
Dann schau Dir noch einmal die Methode d an - was wird da gemacht? Die Parameter werden mit gleichem Wert aufgerufen ... nimm z.B. 5 an. Was bedeutet das dann? Was kommt da für eine Exception?
(Du hast es ja ausprobiert, daher kennst du die Exception wohl schon .... musst nur noch die Erklärung finden....)
 
K

kneitzel

Gast
Ja, es wird ein Array erstellt. Nur wie groß ist dieses Feld und welche Felder werden befüllt? Nimm das Beispiel mit Parameter 5. Wie groß ist das Array, was sind genau die Grenzen der for Schleife?
 

baker333

Bekanntes Mitglied
Das ist alles eigentlich so einfach. Hab Java zu lange Schleifen lassen, aber ich glaube in 1- 2 Wochen bin ich wieder drin. Alles eine Sache der Übung und Konzentration. Danke :)
 
K

kneitzel

Gast
Gerne und ja: mit etwas Übung geht das immer besser. Wobei Ausprobieren oft das Einfachste ist (Bei Test Driven Development wird - so man es so sehen will - ja auch alles ausprobiert :) ).

Was aber dann bei der Aufgabe noch wichtig ist, ist die Behandlung der Exceptions. Wo wird eine Exception gefangen und wo nicht?
 
K

kneitzel

Gast
Welche Ausnahme wird an den Aufrufer von GefaehrlicheKlasse.a(10) weitergereicht?

Diese Frage hast Du nicht beantwortet ... Du hast gesagt, dass es zu einer Division durch 0 kommt - aber die Exception hast Du noch nicht genannt.
Aber Du rufst ja a auf ... da werden dann noch b und c aufgerufen und da sind try / catch Blöcke enthalten. Was passiert also aus Sicht vom a(10) Aufruf?
 

Timmey25

Neues Mitglied
Hallo zusammen, ich bin kompletter Neueinsteiger und gerade dabei mir die Basics zu erarbeiten. Ich bin auf selbige Aufgabe gestoßen und scheitere schon daran die Ausgabe zu testen.
Wie gehe ich vor, wenn ich die Ausgabe erhalten möchte? Mein erster Ansatz: Klasse GefaehrlicheKlasse erzeugen und den Code einfügen, weitere Klasse mit Main Methode erzeugt und System.out.print Befehl erzeugt. Wie erstelle ich nun den Aufrufer GefaehrlicheKlasse.a(10) um das Ganze zu testen? Danke für eure Hilfe :)
 

Ähnliche Java Themen


Oben