Zu den Aufzeichnungen der tutorials.de-Live-Workshops
Like Tree1Danke
  • 1 Beitrag von Matt297
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
505
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Registriert seit
    Oct 2005
    Beiträge
    277
    Hallo,
    habe hier im Skript eine Aufgabe, zu der ich eine Frage habe:

    "Schreiben Sie eine Methode, mit der sie ganze, gerade Zahlen halbieren können. Die Methode muss eine Exception werfen, falls eine ungerade Zahl übergeben wird. Verwenden Sie dazu eine angemessene Exception-Klasse."

    Mir ist das mit den Fehlermeldungen noch nicht ganz klar. Ich soll ja nicht so etwas wie folgt machen
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    import java.util.*;
    public class Teiler {
        
        public static void geradeZahlTeilen(int zahl) {
            int wert = 6;
            
            if ((wert % 2) > 0) {
                System.out.println("Bitte eine gerade Zahl eingeben.");
            } else {
                System.out.println("Das Ergebnis ist: "+(wert/2));
            }
        }
        
        public static void main(String[] args) {
            
            geradeZahlTeilen(10);
           }
    }
    Sondern eine try-catch-Anweisung. Wo kann denn in dem Code eine Exception auftreten?
    Welche Exception kann ich denn nehmen? NumberFormatException geht ja nicht, da das Format ja auf jeden Fall richtig ist.

    Gruß
    schiese
     

  2. #2
    Matt297 Matt297 ist offline Mitglied Gold
    Registriert seit
    Oct 2008
    Beiträge
    172
    Eine Exception werfen kannst du mit "throw", diese wird dann(falls kein try-catch-Block vorhanden) an die übergeordnete Funktion weitergegeben.
    Logisch gesehen würde ich in deinem Fall eine IllegalArgumentException nehmen, da in dem Fall der Parameter(Argument) nicht den richtigen Wert hat, also so:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    import java.util.*;
    import java.lang.*;
    public class Teiler {
        
        public static void geradeZahlTeilen(int zahl) {
            int wert = 6;
            
            if ((wert % 2) > 0) {
                throw new IllegalArgumentException("wert ist ungerade");
            } else {
                System.out.println("Das Ergebnis ist: "+(wert/2));
            }
        }
        
        public static void main(String[] args) {
            
            geradeZahlTeilen(10);
           }
    }
    schiese bedankt sich. 

  3. #3
    Thinker Tutorials.de Gastzugang
    Zitat Zitat von Matt297 Beitrag anzeigen
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    import java.util.*;
    import java.lang.*;
    public class Teiler {
        
        public static void geradeZahlTeilen(int zahl) {
            int wert = 6;
            
            if ((wert % 2) > 0) {
                throw new IllegalArgumentException("wert ist ungerade");
            } else {
                System.out.println("Das Ergebnis ist: "+(wert/2));
            }
        }
        
        public static void main(String[] args) {
            
            geradeZahlTeilen(10);
           }
    }
    Vorsicht!
    Das Programm funktioniert für negative ungerade Zahlen nicht! Liegt daran, daß unter Java der Ausdruck wert % 2 negativ wird, wenn "wert" negativ ist. Probiers aus:
    Code java:
    1
    2
    3
    
    public static void main(String[] args) {
        geradeZahlTeilen(-11);
    }
    ergibt als Ausgabe "Das Ergebnis ist -5"

    Thinker
     

  4. #4
    Registriert seit
    Oct 2005
    Beiträge
    277
    Vielen Dank, Matt297.
    Jetzt habe ich gerade gefunden, dass man auch
    Code java:
    1
    2
    3
    
    public static void geradeZahlTeilen(int zahl) throws IllegalArgumentException {
    .....
    }
    schreiben kann. Da war leider keine Erklärung zu. Heißt es, dass die Methode eine Exception werfen kann?

    @Thinker: hast Recht. Habe es so geändert:
    Code java:
    1
    2
    3
    
    if ((wert % 2) != 0) {
    ...
    }

    schiese
     

  5. #5
    Thinker Tutorials.de Gastzugang
    Zitat Zitat von schiese Beitrag anzeigen
    Vielen Dank, Matt297.
    Jetzt habe ich gerade gefunden, dass man auch
    Code java:
    1
    2
    3
    
    public static void geradeZahlTeilen(int zahl) throws IllegalArgumentException {
    .....
    }
    schreiben kann. Da war leider keine Erklärung zu. Heißt es, dass die Methode eine Exception werfen kann?
    "throws Exception heisst nur, daß die Exception geworfen werden _kann_, nicht das sie geworfen werden muß. Das dient sozusagen als Markierung, damit der Programmierer,der die Methode aufruft weiß, was er behandeln sollte. Wirklich werfen kannst du sie nur mit "throw new MyFavoriteException()".
    (Alle "Checked Exceptions" muß man auf diese Weise deklarieren, wenn man sie werfen will. Google bringt da bestimmt noch bessere Erklärungen)

    Zitat Zitat von schiese Beitrag anzeigen
    V
    @Thinker: hast Recht. Habe es so geändert:
    Code java:
    1
    2
    3
    
    if ((wert % 2) != 0) {
    ...
    }
    Jepp, so ists besser.
     

  6. #6
    Registriert seit
    Oct 2005
    Beiträge
    277
    Ich habe jetzt eine neue Frage.
    Der zweite Teil der Aufgabe lautet:
    "Testen Sie ihre Methode und die Exception mit einem Rahmenprogramm, das die zu teilende Zahl zeilenweise solange per Tastatureingabe entgegennimmt, bis das Programm mit der Eingabe 'q' beendet wird. Vorher soll das Programm nicht abgebrochen werden können. Berücksichtigen Sie dazu alle auftretenden
    Exceptions."

    Mein Programm funktioniert soweit auch. Die Frage ist nur, ob das so eine gute Lösung ist, oder löst man das Problem anders, vllt. effizienter?

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.BufferedReader;
     
    public class Serie2_Aufgabe4 {
        
        public static void geradeZahlTeilen(int zahl) throws IllegalArgumentException {
     
            if ((zahl % 2) != 0) {
                throw new IllegalArgumentException("Die Zahl ist ungerade");
            } else {
                System.out.println("Das Ergebnis ist: "+(zahl/2));
            }
        }
        
        public static void main(String[] args) throws IOException {
            String wert;
            InputStream lesen = System.in;
            InputStreamReader zilesen = new InputStreamReader(lesen);
            BufferedReader zelesen = new BufferedReader(zilesen);
     
            do {
                System.out.println("Bitte eine Zahl eingeben.");
                wert = zelesen.readLine();
                
                try {
                geradeZahlTeilen(Integer.valueOf(wert));
                } catch (NumberFormatException e) {
                    System.out.println("Bitte keine Buchstaben.");
                } catch (IllegalArgumentException e) {
                    System.out.println("Bitte eine gerade Zahl eingeben.");
                }
            } while (!String.valueOf(wert).equals("q"));    
        }
    }

    Gruß schiese
     

Ähnliche Themen

  1. Exceptions
    Von TheTank im Forum VisualStudio & MFC
    Antworten: 1
    Letzter Beitrag: 28.07.10, 07:43
  2. Exceptions
    Von lernen.2007 im Forum Java
    Antworten: 1
    Letzter Beitrag: 14.06.06, 13:17
  3. Exceptions
    Von lernen.2007 im Forum Java
    Antworten: 9
    Letzter Beitrag: 17.12.05, 18:14
  4. Exceptions wie in Java
    Von MD1978 im Forum .NET Archiv
    Antworten: 12
    Letzter Beitrag: 24.01.05, 17:27
  5. Exceptions
    Von PPhilipp im Forum Java
    Antworten: 1
    Letzter Beitrag: 07.12.03, 20:17