Exception werfen

Paratonix

Mitglied
Hallo, ich arbeite derzeit an einer Anwendung welche einen String als Binärzahl übergeben bekommt und dann in ein int umwandeln soll. Falls der String keine Binärzahl ist soll eine Exception geworfen werden, welche selbst erzeugt wurde, durch das Ableiten von der RuntimeException Klasse.

Dazu habe ich erst einmal die Runtimeexception Klasse überschrieben:
Java:
public class NoBinaryNumberException extends Exception {
    
    public NoBinaryNumberException () {
        super();
    }
    
    public NoBinaryNumberException (String binzahl) {
        super(binzahl +"ist kein gültiger Wert! Bitte eine Binärzahl eingeben!");
    }
    
}
Diese Exception wollte ich dann in folgender Klasse werfen:
Java:
class ConvertBinary {
    String binzahl;
    static int zahl;
    
static int convert (String binzahl) {
    for (int i = 0; i <= binzahl.length(); i++) {
        if (binzahl.charAt(i) != 1 || binzahl.charAt(i) != 0) {
            throw new NoBinaryNumberException(binzahl);
        }
        else {
            zahl = Integer.parseInt(binzahl);
        }
    }
    return zahl;
}
}

Und erhalte folgende Fehlermeldung:
ConvertBinary.java:8: error: unreported exception NoBinaryNumberException; must be caught or declared to be thrown
throw new NoBinaryNumberException(binzahl);

Anscheindend wurde die Exception falsch eingebaut, kann mir jemand weiterhelfen wie ich diese richtig in den Code einbinde?
 
Also im Text schreibst Du, dass Du von RuntimeException ableiten willst. Aber im Code leitest Du von Exception ab.

RuntimeException ist unchecked (so wie Du es wohl auch willst) und Exception ist eine Checked Exception, d.h. wenn Du die nutzt, dann musst Du auch angeben, dass die Funktion diese Exception werfen kann.
 
Ok, vielen Dank erstmal ! Ich habe jetzt von RuntimeException abgeleitet und es hat funktioniert!
Aber noch einmal zum Verständnis, in welcher Form gibt man bei Exception dann an, dass die Funktion eine Exception werfen kann?
 
Ok, vielen Dank erstmal ! Ich habe jetzt von RuntimeException abgeleitet und es hat funktioniert!
Aber noch einmal zum Verständnis, in welcher Form gibt man bei Exception dann an, dass die Funktion eine Exception werfen kann?
Das würde mit "throws" gehen. Wenn die Exception eine Checked Exception bleiben sollte, dann würde die Funktion so aussehen:
Java:
static int convert (String binzahl) throws NoBinaryNumberException {

Was ist das für ein Blödsinn? Eins von beiden wird's immer nicht sein. Zudem gilt '0' != 0.
Anfänger?
Also das ist doch eigentlich offensichtlich. Daher verstehe ich Deine heftige Reaktion nicht. Statt dessen hätte man da doch freundlich drauf hinweisen können. Wobei ich bei sowas eher dazu neige, die Leute selbst so Fehler finden zu lassen. Sein Code compiliert ja jetzt, so dass er testen kann, ob es funktioniert oder nicht ...
 
Das würde mit "throws" gehen. Wenn die Exception eine Checked Exception bleiben sollte, dann würde die Funktion so aussehen:
Java:
static int convert (String binzahl) throws NoBinaryNumberException {


Also das ist doch eigentlich offensichtlich. Daher verstehe ich Deine heftige Reaktion nicht. Statt dessen hätte man da doch freundlich drauf hinweisen können. Wobei ich bei sowas eher dazu neige, die Leute selbst so Fehler finden zu lassen. Sein Code compiliert ja jetzt, so dass er testen kann, ob es funktioniert oder nicht ...

Ok danke, also meine Anwendung läuft erstmal soweit. Wenn ich eine Binärzahl eingebe kommt wie gewünscht keine Exception, aber habe noch ein kleines Problem, dass nicht die richtige Exception geworfen wird. Ansatt meiner definierten Exception zeigt er mir folgende:
Exception in thread "main" java.lang.NumberFormatException: For input string: "1101a00"
Mein Code sieht jetzt folgendermaßen aus:

Java:
class ConvertBinary {
    String binzahl;
    static int zahl;
   
static int convert (String binzahl) {
    for (int i = 0; i <= binzahl.length()-1; i++) {
        if (binzahl.charAt(i) != '1' && binzahl.charAt(i) != '0') {
            throw new NoBinaryNumberException(binzahl);
        }
        else {
            zahl = Integer.parseInt(binzahl);
        }
    }
    return zahl;
}
}

Java:
public class NoBinaryNumberException extends RuntimeException {
   
    public NoBinaryNumberException () {
        super();
    }
   
    public NoBinaryNumberException (String binzahl) {
        super(binzahl +"ist kein gültiger Wert! Bitte eine Binärzahl eingeben!");
    }
   
}

Und eine Testklasse:
Java:
class ConvertBinaryTest {
    public static void main (String [] args) {
        ConvertBinary.convert("110100");
    }
}

Und ja ich bin noch Anfänger (ich lerne jetzt seit 2 Monaten Java)
 
So, damit die Kinder da oben Ruhe geben, muss ich auch was dazu schreiben.

Überleg mal, was in der Zeile
Java:
zahl = Integer.parseInt(binzahl);
passiert.
 
Bin auch immer müde in letzter Zeit... Das muss eine "verschleppte" oder besser: verkappte Frühjahrsmüdigkeit sein...
 

Neue Themen


Zurück
Oben