# Leerer Parameter Exception



## ignos (13. Jan 2010)

Wir sind gerade in Java bei Ausnahmebehandlung, dazu sollen wir ein kleines Programmgeschrieben was folgendes macht:
_Schreiben Sie nun ein Anwendungsprogramm, in dem vom Benutzer erfragt wird, welche Operation auf welchen Zahlen durchgeführt werden soll und welches anschließend die entsprechende Methode aufruft und behandeln sie die Ausnahmen_

Hab ich soweit fertig. Mir fehlt jedoch noch folgende Exception: _*Fehlende Eingaben: Der Anwender gibt einen oder beide Parameter nicht ein*_
Also wenn er einfach statt irgendwas einzugeben *enter *drückt.


```
import java.util.*; 
public class ArithmOp 
{ 
	/** fuehrt eine Division zwischen zwei uebergebenen Parametern durch 
	* 
	* @param zaehler --> Typ double, ueber dem Bruchstrich 
	* @param nenner --> Typ double, unter dem Bruchstrich 
	* @return --> gibt das Ergebnis der Division zurueck, Typ double 
	*/ 
	public static double dividiere(double zaehler, double nenner) 
	{ 
		Double ergebnis = new Double(zaehler / nenner); 
		if (ergebnis.isInfinite()) 
			throw new ArithmeticException(); 
		return (zaehler / nenner); 
	} 
	
	/** zieht die Wurzel eines uebergebenen Parameters 
	* 
	* @param zahl --> Typ int, die Zahl aus der die Wurzel gezogen werden soll 
	* @return --> gibt das Ergebnis des Wurzelziehens zurueck, Typ double 
	*/ 
	public static double zieheWurzel(int zahl) 
	{ 
		Double ergebnis = new Double(Math.sqrt(zahl)); 
		if (ergebnis.isNaN()) 
			throw new ArithmeticException(); 
		return Math.sqrt(zahl); 
	} 
	
	public static void main (String [] args) 
	{ 
		Scanner keyboard = new Scanner(System.in); 
		int eingabe = 0; 
		double ergebnis = 0; 
		
		// Frage den Benutzer welche arithmetische Operation durchgefuehrt werden soll 
		System.out.println("Welche artithmetische Operation moechten Sie durchfuehren?");
		System.out.println("0.\tProgramm beenden ");
		System.out.println("1.\tDivision"); 
		System.out.println("2.\tWurzel"); 
		System.out.print("Eingabe: "); 
		
		// Eingabe des Benutzers muss ein Integer-Wert sein, ansonsten Exception ausloesen
		try 
		{ 
			eingabe = keyboard.nextInt(); 
		} 
		catch (InputMismatchException e1) 
		{ 
			System.out.println("Keine gueltige Auswahl! Bitte nur Integer-Werte (ganze Zahlen) eingeben!"); 
		}
		
		// ueberpruefe die Eingabe des Benutzers --> Welche Operation wurde ausgewaehlt? 
		switch (eingabe) 
		{ 
		// Programm soll beendet werden 
		case 0:
			{
				System.out.print("Vielen Dank. Auf Wiedersehen!");
			} 
			break; 
		
		// Division soll durchgefuehrt werden 
		// Eventuell auftretende Exceptions werden abgefangen. 
		case 1: 
			try 
			{ 
				System.out.print("Bitte geben Sie den Zaehler ein: "); 
				
				int zaehler = keyboard.nextInt(); 
				System.out.print("Bitte geben Sie den Nenner ein: "); 
				
				int nenner = keyboard.nextInt(); 
				ergebnis = dividiere(zaehler, nenner); 
				System.out.println("Das Ergebnis ist: " + ergebnis);			 
			}
			catch (InputMismatchException e2) 
			{ 
				System.out.println("Bitte nur Integer-Werte eingeben!"); 
			} 
			catch (ArithmeticException e2) 
			{ 
				System.out.println("Division durch 0 nicht erlaubt!"); 
			}
			break; 
		
		// Wurzelziehen soll durchgefuehrt werden 
		// Eventuell auftretende Exceptions werden aufgefangen 
		case 2: 
			try 
			{ 
				System.out.print("Bitte geben Sie eine Zahl ein, von der die Wurzel gezogen werden soll: "); 
				int zahl = keyboard.nextInt(); 
				ergebnis = zieheWurzel(zahl); 
				System.out.println("Das Ergebnis ist: " + ergebnis); 
			} 
			catch (InputMismatchException e3) 
			{ 
				System.out.println("Bitte nur Integer-Werte eingeben!"); 
			}
			catch (ArithmeticException e3) 
			{ 
				System.out.println("Die Wurzel einer negativen ganzen Zahl kann nicht gezogen werden"); 
			} 
			break; 
		
		// Es wurde zwar ein Integer-Wert eingeben, dieser kann jedoch keiner gueltigen Auswahl 
		// zugeordnet werden 
		default: 
			System.out.println("Keine gueltige Auswahl getroffen. Das Programm wird beendet."); 
		} 
	} 
}
```

Vielleicht hat kann mir einer ein wenig helfen. Thx


----------



## Atze (13. Jan 2010)

also der scanner sollte dir beim aufruf von next eine NoSuchElementException werfen, bei bedarf kannst du diese ja in einer nullpointer wandeln


----------



## ignos (14. Jan 2010)

Hmm mach da irgendwas falsch, entweder sagt er mir falscher Typ statt int -> string, oder er macht gar nichts und wenn ich enter drücke springt er eine zeile weiter! Hab keine Lust mehr zu probieren. Wie müsste es den richtig aussehen!!??


----------



## MQue (14. Jan 2010)

Also ich würds auf die Schnelle jetzt mal so machen:


```
import java.util.*;

public class ArithmOp {

    /** fuehrt eine Division zwischen zwei uebergebenen Parametern durch
    *
    * @param zaehler --> Typ double, ueber dem Bruchstrich
    * @param nenner --> Typ double, unter dem Bruchstrich
    * @return --> gibt das Ergebnis der Division zurueck, Typ double
    */
    public static double dividiere(double zaehler, double nenner) {
        Double ergebnis = new Double(zaehler / nenner);
        if (ergebnis.isInfinite())
            throw new ArithmeticException();
        return (zaehler / nenner);
        }

    /** zieht die Wurzel eines uebergebenen Parameters
    *
    * @param zahl --> Typ int, die Zahl aus der die Wurzel gezogen werden soll
    * @return --> gibt das Ergebnis des Wurzelziehens zurueck, Typ double
    */
    public static double zieheWurzel(int zahl) {
        Double ergebnis = new Double(Math.sqrt(zahl));
        if (ergebnis.isNaN())
            throw new ArithmeticException();
        return Math.sqrt(zahl);
        }

    public static void main (String [] args) {
        Scanner keyboard = new Scanner(System.in);
        int eingabe = 0;
        double ergebnis = 0;

        // Frage den Benutzer welche arithmetische Operation durchgefuehrt werden soll
        System.out.println("Welche artithmetische Operation moechten Sie durchfuehren?");
        System.out.println("0.\tProgramm beenden ");
        System.out.println("1.\tDivision");
        System.out.println("2.\tWurzel");
        System.out.print("Eingabe: ");

        // Eingabe des Benutzers muss ein Integer-Wert sein, ansonsten Exception ausloesen
        try {
            eingabe = Integer.valueOf(keyboard.nextLine());
            }
        catch (InputMismatchException e1) {
            System.out.println("Keine gueltige Auswahl! Bitte nur Integer-Werte (ganze Zahlen) eingeben!");
            }
        catch(NumberFormatException nfe) {
            System.out.println("Keine gueltige Auswahl! Bitte nur Integer-Werte (ganze Zahlen) eingeben!");
            }

        System.out.println("Das ist die Eingabe: " + eingabe);

        // ueberpruefe die Eingabe des Benutzers --> Welche Operation wurde ausgewaehlt?
        switch (eingabe) {
        // Programm soll beendet werden
            case 0: System.out.println("Vielen Dank. Auf Wiedersehen!");
                    break;
        // Division soll durchgefuehrt werden
        // Eventuell auftretende Exceptions werden abgefangen.
            case 1: try {
                        System.out.print("Bitte geben Sie den Zaehler ein: ");
                        int zaehler = keyboard.nextInt();
                        System.out.print("Bitte geben Sie den Nenner ein: ");
                        int nenner = keyboard.nextInt();
                        ergebnis = dividiere(zaehler, nenner);
                        System.out.println("Das Ergebnis ist: " + ergebnis);
                        }
                    catch (InputMismatchException e2) {
                        System.out.println("Bitte nur Integer-Werte eingeben!");
                        }
                    catch (ArithmeticException e2) {
                        System.out.println("Division durch 0 nicht erlaubt!");
                        }
                    break;
        // Wurzelziehen soll durchgefuehrt werden
        // Eventuell auftretende Exceptions werden aufgefangen
            case 2: try {
                        System.out.print("Bitte geben Sie eine Zahl ein, von der die Wurzel gezogen werden soll: ");
                        int zahl = keyboard.nextInt();
                        ergebnis = zieheWurzel(zahl);
                        System.out.println("Das Ergebnis ist: " + ergebnis);
                        }
                    catch (InputMismatchException e3) {
                        System.out.println("Bitte nur Integer-Werte eingeben!");
                        }
                    catch (ArithmeticException e3) {
                        System.out.println("Die Wurzel einer negativen ganzen Zahl kann nicht gezogen werden");
                        }
                    break;
        // Es wurde zwar ein Integer-Wert eingeben, dieser kann jedoch keiner gueltigen Auswahl
        // zugeordnet werden
            default:System.out.println("Keine gueltige Auswahl getroffen. Das Programm wird beendet.");
        }
    }
}
```


----------



## ignos (14. Jan 2010)

Hmm jetzt geht das zwar mit einem leeren paarameter, jedoch wenn man was anderes als einen integer eingibt gibt er keine InputMismatchException aus sondern die NumberFormatException! Ich brauche jedoch explizit die Ausnahme für etwas anderes als einen Integer.


----------



## MQue (14. Jan 2010)

Ich würds zwar jetzt nicht so machen aber wenn dus so haben willst, dann kannst du es ja so machen:


```
import java.util.*;

public class ArithmOp {

    /** fuehrt eine Division zwischen zwei uebergebenen Parametern durch
    *
    * @param zaehler --> Typ double, ueber dem Bruchstrich
    * @param nenner --> Typ double, unter dem Bruchstrich
    * @return --> gibt das Ergebnis der Division zurueck, Typ double
    */
    public static double dividiere(double zaehler, double nenner) {
        Double ergebnis = new Double(zaehler / nenner);
        if (ergebnis.isInfinite())
            throw new ArithmeticException();
        return (zaehler / nenner);
        }

    /** zieht die Wurzel eines uebergebenen Parameters
    *
    * @param zahl --> Typ int, die Zahl aus der die Wurzel gezogen werden soll
    * @return --> gibt das Ergebnis des Wurzelziehens zurueck, Typ double
    */
    public static double zieheWurzel(int zahl) {
        Double ergebnis = new Double(Math.sqrt(zahl));
        if (ergebnis.isNaN())
            throw new ArithmeticException();
        return Math.sqrt(zahl);
        }

    private static int getInteger(String input) {
        try {
            return Integer.valueOf(input);
            }
        catch(NumberFormatException nfe) {
            throw new InputMismatchException();
            }
        }

    public static void main (String [] args) {
        Scanner keyboard = new Scanner(System.in);
        double ergebnis = 0;
        int eingabe = 0;
        // Frage den Benutzer welche arithmetische Operation durchgefuehrt werden soll
        System.out.println("Welche artithmetische Operation moechten Sie durchfuehren?");
        System.out.println("0.\tProgramm beenden ");
        System.out.println("1.\tDivision");
        System.out.println("2.\tWurzel");
        System.out.print("Eingabe: ");

        // Eingabe des Benutzers muss ein Integer-Wert sein, ansonsten Exception ausloesen
        try {
            String eingabeString = keyboard.nextLine();
            eingabe = getInteger(eingabeString);
                
            }
        catch (InputMismatchException e1) {
            System.out.println("Keine gueltige Auswahl! Bitte nur Integer-Werte (ganze Zahlen) eingeben!");
            }

        // ueberpruefe die Eingabe des Benutzers --> Welche Operation wurde ausgewaehlt?
        switch (eingabe) {
        // Programm soll beendet werden
            case 0: System.out.println("Vielen Dank. Auf Wiedersehen!");
                    break;
        // Division soll durchgefuehrt werden
        // Eventuell auftretende Exceptions werden abgefangen.
            case 1: try {
                        System.out.print("Bitte geben Sie den Zaehler ein: ");
                        int zaehler = keyboard.nextInt();
                        System.out.print("Bitte geben Sie den Nenner ein: ");
                        int nenner = keyboard.nextInt();
                        ergebnis = dividiere(zaehler, nenner);
                        System.out.println("Das Ergebnis ist: " + ergebnis);
                        }
                    catch (InputMismatchException e2) {
                        System.out.println("Bitte nur Integer-Werte eingeben!");
                        }
                    catch (ArithmeticException e2) {
                        System.out.println("Division durch 0 nicht erlaubt!");
                        }
                    break;
        // Wurzelziehen soll durchgefuehrt werden
        // Eventuell auftretende Exceptions werden aufgefangen
            case 2: try {
                        System.out.print("Bitte geben Sie eine Zahl ein, von der die Wurzel gezogen werden soll: ");
                        int zahl = keyboard.nextInt();
                        ergebnis = zieheWurzel(zahl);
                        System.out.println("Das Ergebnis ist: " + ergebnis);
                        }
                    catch (InputMismatchException e3) {
                        System.out.println("Bitte nur Integer-Werte eingeben!");
                        }
                    catch (ArithmeticException e3) {
                        System.out.println("Die Wurzel einer negativen ganzen Zahl kann nicht gezogen werden");
                        }
                    break;
        // Es wurde zwar ein Integer-Wert eingeben, dieser kann jedoch keiner gueltigen Auswahl
        // zugeordnet werden
            default:System.out.println("Keine gueltige Auswahl getroffen. Das Programm wird beendet.");
        }
    }
}
```


----------

