ExceptionHandling mit bescheidenem Quellcode

11. Was versteht man unter einer Exception und wozu verwendet man sie? Verändern Sie
das folgende Programm so, dass ein möglicher Fehler abgefangen wird.

import static Prog1Tools.IOTools.*;
public class KlausurExc1 {
public static void main(String[] args) {
int i,z;
double a[] = new double[6];
for (i=1;i<=4;i++ ) {
z = readInteger("Zahl= ");
a[z] = z*z+1.5;
System.out.println(a[z]);
}
}
}

Meiner Meinung nach ist das Programm, abgesehen von ungehandelten Exceptions, gar nicht lauffähig, da z = readInteger("Zahl= "); (int=String) so doch gar nicht funktionieren kann oder? Ausserdem gibt es das Package das importiert wird doch gar nicht?
 
Und ob das funktioniert. readInteger() ließt ab einem String eine Zahl und gibt diese als int zurück.

Eine Exception ist eine Ausnahme. Sie wird "geworfen", wenn etwas passiert, was nicht vorgesehen war. Damit wird sofort aus dem entsprechenden Programmteil herausgesprungen und die Exception wird so lange weitergereicht, bis keine entsprechende throws Anweisung mehr in der Methode mehr steht und sie entweder abgefangen wird oder, bei RuntimeExceptions, auch nicht unbedingt abgefangen wird.
Allerdings antworte ich dir zu dem Thema nur, weil ich gerade gute Laune habe. Bei Google steht mehr in besserer Qualität schneller verfügbar. 😉

Packages können auch selber erstellt werden. In größeren Projekten ist das Gang und Gäbe.

Wie man das Programm umschreibt müsstest du zuerst selber versuchen. Dann kannst du Fragen stellen.

Java Code bitte in Java Tags.
 
Danke für die Antwort erstmal. Aber hier ist kein Scanner oder sonstiges definiert und Eclipse macht mir auch Ärger bei der readInteger Methode. Und dass man da n paar Exceptions abfangen muss seh ich ja.
 
Ich hätte gesagt so hier:

Java:
import static Prog1Tools.IOTools.*;
public class KlausurExc1 {
public static void main(String[] args) {
int i,z;
double a[] = new double[6];
try{
for (i=1;i<=4;i++ ) {
z = readInteger("Zahl= ");
a[z] = z*z+1.5;
System.out.println(a[z]);}
catch(Exception e){e.printStackTrace();}
}
}
}
 
Botte formatiere (Einrückung) deinen Code entsprechend den Konventionen, um ihn lesbar zu machen.

Dann nimmt dein Programm den Code kommentarlos hin und beendet sich. Das ist nicht der Sinn von ExceptionHandling.

Dann habe ich auch noch eine Frage: wie seht ihr das? Sollte der Teil im try Block so kurz, wie möglich sein oder eher nicht?
 
@Gucky
Mir wurde beigebracht, dass der try-Teil so kurz sein sollte, wie möglich, weil:
a) könnte man sonst übertrieben gesagt den kompletten Code dort rein packen
b) ķönnten mir theoretisch mehrere verschiedene Exceptions fliegen (mit verschiedenen Ursachen), die mir aber so durch die Lappen gehen. Somit könnte der Code total verbuggt sein, ohne dass ichs merke.
 
Mit dem Hinweis, die Ausführung sei fehlgeschlagen, aufgrund einer falschen Eingabe.

Das lässt sich relativ leicht mit einem Flag lösen. Am Anfang der Schleife wird ein boolean, welches außerhalb der Schleife deklariert wurde, auf false gestellt und wenn eine Exception fliegt, wird es auf true gestellt.
 
Mir wurde beigebracht, dass der try-Teil so kurz sein sollte, wie möglich, weil: [...]
Außerdem ist ein "sinnvolles Abfangen" eigentlich nur nah an dem "Ort" möglich, der die Exception verursachte.
Je weiter "außen" man abfängt, desto unspezifischer muss die Problembehandlung zwingenderweise werden - und desto weniger Sinn hat das dann meistens.
 
Moin,

so, hier erstmal 'ne lesbare Form (sonst kriegt man ja Augenkrebs ...)
Java:
    import static Prog1Tools.IOTools.*;
    
    public class KlausurExc1 
    {
        public static void main( String[] args )
        {
            int i,z;
            double a[] = new double[6];
            try
            {
                for( i=1; i<=4; i++ ) 
                {
                    z = readInteger( "Zahl= " );
                    a[z] = z*z + 1.5;
                    System.out.println( a[z] );
                }
                catch( Exception e )
                {
                    e.printStackTrace();
                }
            }
        }
    }

gruß
Klaus
 

Zurück
Oben