# Konsoleneingabe überprüfen



## Raistlin (27. Jan 2011)

Hallo zusammen,
für die letzte Übung in diesem Semester hat uns unser Prof eigentlich was einfaches versprochen. Leider habe ich doch ein kleines Problem, bei dem ich einfach ein paar Denkanstöße brauche.
Es geht darum, dass wir ein Programm schreiben sollen, dass eine quadratische Gleichung löst. Soweit so gut. Über die Konsole sollen drei Argumente eingegeben werden (als double). Da das Hauptthema der Übung Exceptions heißt, sollen wir jetzt auch entsprechende Exceptions einbauen, wenn z.B. statt drei doubles ein anderer Wert eingegeben wird (z.B. char). Das ist mein erstes Problem. Ich weiß nicht, wie ich die Konsoleneingabe auf den Typ überprüfen kann.
Das zweite Problem ist, dass mein Programm eine Exception werfen soll, wenn statt drei nur zwei Argumente eingegeben wurden.
Ich hatte zuerst für Letzteres folgende Idee (auskommentierter Code):

```
public void solve () throws NotQuadraticException, UnsolvableException, IncompleteException{
//  if (c == null)
//  throw new IncompleteException();  
    if (a == 0)
      throw new NotQuadraticException();
    setD (Math.pow(b,2)-(4*a*c));
    if (d < 0)
      throw new UnsolvableException();
    setW (Math.sqrt(d));
    setX1 ((-b+w)/(2*a));
    setX2((-b-w)/(2*a));
    System.out.println ("Loesung x1: "+getX1()+"; Loesung x2: "+getX2() );
  }
```
Dat funktioniert aber nicht.....

Wie gesagt, für Denkanstöße wäre ich sehr dankbar....


----------



## Marco13 (27. Jan 2011)

Wo und wie machst du denn die Eingabe? Wenn es schon doubles c und a gibt, ist es für die Prüfung, ob es KEIN double war, ja schon zu spät


----------



## Raistlin (28. Jan 2011)

oooooookay... also soweit klar, ich mach die Bedingung vor die Variablendeklaration mit Double.parsedouble..... das klappt auch mit meinem zweiten Problem, also ich kriegs jetzt soweit hin, dass er mir, wenn ich nur zwei statt drei Attribute eingebe, meine Incomplete Exception wirft.......
Aber das mit dem Typ.... da fehlt mir komplett der Ansatz. :noe:


----------



## chalkbag (28. Jan 2011)

Guten Morgen,

du hast ja schon richtig erkannt, dass du mit Double.parseDouble einen Typ von z.B String auf ein Double casten kannst. An sich bekommst du hier ja schon eine Exception (ich glaube TypCastException) geworfen, wenn es eben kein Double ist.

Diese kannst du ja wie gewünscht über throws bei der Methodendefinition weiterreichen, oder über einen Try /Catch Block entsprechend verarbeiten, ausgeben oder eine Selbstdefinierte Exception (z.b. KeinDoubleWertException) über throws new .. werfen.

Eigentlich hast du ja alles, was du brauchst?

[Edit]
War eine NumberFormatException
Also anbei ein Code, der beide Möglichkeiten vereint (ja ich weiß, dass macht so wenig Sinn).


```
public static void main(String[] args)throws NumberFormatException {
		Double value;
		try{
		value= Double.parseDouble("kein Double");
		} catch (NumberFormatException nfe) {
			value= 0.0;
			throw nfe;
		}
	}
```


----------



## Marco13 (28. Jan 2011)

Naja, Double.parseDouble wirft ja eine NumberFormatException, wenn man statt einer Zahl z.B. sowas wie "Hallo" eingibt. DORT könnte man das abfangen - und IMHO weder vorher noch nachher. Wurde gesagt, wo genau die Eingabe gemacht werden soll? Im Moment steht sie wohl in der main...?


----------

