kaffeetrinkerX14
Grünschnabel
Hallo! Bitte dringend um Hilfe!
Ich habe ein riesen großes Problem mit einem Rechner, zu dem man sowohl über Kommandozeilenargumenten als auch Konsoleneingabe Zugriff haben soll.
Aus irgendeinem Grund würgt der Rechner bei der NumberFormatException (Kommandozeilenargumente) jedoch ständig mein Programm ab, was nicht sein sollte....
Mir ist klar, das der Fehler in args[0] liegt, den ich als String deklariert habe aber bei keiner Eingabe natürlich keinen String finden kann. Aber wie kann man das Programm trotz dieses Fehlers weiterlaufen lassen, damit der in die Konsoleneingabe springt?
Eigentlich dürfte der diesen Fehler doch gar nicht ausgeben, weil das Array doch erst wenn die Bedingung if(args.length==0) nicht erfüllt wird, mit Daten gefüllt wird?
Hänge wirklich schon seit Wochen an diesem Problem, aber komme selbst nach dem Studieren von gefühlten 1000 Büchern, Skripten, Foreneinträgen etc. einfach nicht weiter
Hier ist mein Quellcode:
Ich habe ein riesen großes Problem mit einem Rechner, zu dem man sowohl über Kommandozeilenargumenten als auch Konsoleneingabe Zugriff haben soll.
Aus irgendeinem Grund würgt der Rechner bei der NumberFormatException (Kommandozeilenargumente) jedoch ständig mein Programm ab, was nicht sein sollte....
Mir ist klar, das der Fehler in args[0] liegt, den ich als String deklariert habe aber bei keiner Eingabe natürlich keinen String finden kann. Aber wie kann man das Programm trotz dieses Fehlers weiterlaufen lassen, damit der in die Konsoleneingabe springt?
Eigentlich dürfte der diesen Fehler doch gar nicht ausgeben, weil das Array doch erst wenn die Bedingung if(args.length==0) nicht erfüllt wird, mit Daten gefüllt wird?
Hänge wirklich schon seit Wochen an diesem Problem, aber komme selbst nach dem Studieren von gefühlten 1000 Büchern, Skripten, Foreneinträgen etc. einfach nicht weiter

Hier ist mein Quellcode:
Code:
package rechnerc;
import java.text.DecimalFormat;
import java.util.InputMismatchException;
import java.util.Scanner;
public class RechnerC {
/**
* @param args
*/
public static void main(String[] args){
Scanner scan = new Scanner (System.in);
if(args.length==0){
try{
while(true){
Scanner scan2 = new Scanner(System.in);
System.out.println("Bitte geben Sie die erste Zahl ein: ");
System.out.print("");
double ab=scan2.nextDouble();
System.out.println("Bitte geben Sie einen Operanden ein: ");
System.out.print("");
String operatorb=scan2.next();
System.out.println("Bitte geben Sie die zweite Zahl ein: ");
System.out.print("");
double bb=scan2.nextDouble();
double cb=0;
DecimalFormat df2 = new DecimalFormat( "#" );
switch (operatorb) {
case "+":
cb=ab+bb;
System.out.println("Das Ergebnis lautet: "+Math.round( cb * 10000. ) / 10000.);
System.exit(0);
break;
case "-":
cb=ab-bb;
System.out.println("Das Ergebnis lautet: "+Math.round( cb * 10000. ) / 10000.);
System.exit(0);
break;
case "*":
cb=ab*bb;
System.out.println("Das Ergebnis lautet: "+Math.round( cb * 10000. ) / 10000.);
System.exit(0);
break;
case "/":
if(bb==0){
{ System.out.println("Division durch 0 nicht möglich!");
}
}
else{
cb=ab/bb;
System.out.println("Das Ergebnis lautet: "+Math.round( cb * 10000. ) / 10000.);
System.exit(0);
}
break;
case "pow":
cb=Math.pow(ab, bb);
System.out.println("Das Ergebnis lautet: "+Math.round( cb * 10000. ) / 10000.);
System.exit(0);
break;
case "root":
if(ab<0)
{System.out.println("Wurzeln aus negativen Zahlen nicht möglich!");
}
else
cb=Math.pow( ab, 1/bb);
System.out.println("Das Ergebnis lautet: "+Math.round( cb * 10000. ) / 10000.);
System.exit(0);
break;
case "div":
cb=Math.round(ab)/Math.round(bb);
String d = df2.format( cb );
System.out.println("Das Ergebnis lautet: "+d);
System.exit(0);
break;
case "mod":
cb=Math.round(ab)%Math.round(bb);
String s = df2.format( cb );
System.out.println("Das Ergebnis lautet: "+s);
System.exit(0);
break;
default:
System.out.println("Bitte nur gültige Rechenoperationen (+, -, *, /, pow, root, div, mod) eingeben!");
break;
} }}
catch(InputMismatchException e)
{
System.err.println("Bitte für a und b nur Zahlen eingeben!");
scan.nextLine();
}
catch(ArrayIndexOutOfBoundsException e){
scan.nextLine();
}
catch(NumberFormatException e)
{
System.err.println("Bitte nur gültige Rechenoperatoren eingeben!");
return;
}}
else{
try{
String operator=args[1];
double a=Double.parseDouble(args[2]);
double b=Double.parseDouble(args[3]);
double c=0;
DecimalFormat df2 = new DecimalFormat( "#" );
switch (operator) {
case "+":
c=a+b;
System.out.println("Das Ergebnis lautet: "+Math.round( c * 10000. ) / 10000.);
System.exit(0);
break;
case "-":
c=a-b;
System.out.println("Das Ergebnis lautet: "+Math.round( c * 10000. ) / 10000.);
System.exit(0);
break;
case "*":
c=a*b;
System.out.println("Das Ergebnis lautet: "+Math.round( c * 10000. ) / 10000.);
System.exit(0);
break;
case "/":
if(b==0){
{ System.out.println("Division durch 0 nicht möglich!");
}}
else{
c=a/b;
System.out.println("Das Ergebnis lautet: "+Math.round( c * 10000. ) / 10000.);
System.exit(0);
}
break;
case "pow":
c=Math.pow(a, b);
System.out.println("Das Ergebnis lautet: "+Math.round( c * 10000. ) / 10000.);
System.exit(0);
break;
case "root":
if(a<0)
{System.out.println("Wurzeln aus negativen Zahlen nicht möglich!");
}
else
c=Math.pow( a, 1/b);
System.out.println("Das Ergebnis lautet: "+Math.round( c * 10000. ) / 10000.);
System.exit(0);
break;
case "div":
c=Math.round(a)/Math.round(b);
String d = df2.format( c );
System.out.println("Das Ergebnis lautet: "+d);
System.exit(0);
break;
case "mod":
c=Math.round(a)%Math.round(b);
String s = df2.format( c );
System.out.println("Das Ergebnis lautet: "+s);
System.exit(0);
break;
default:
System.out.println("Bitte nur gültige Rechenoperatoren (+, -, *, /, pow, root, div, mod) eingeben!");
break;
}
}
catch(InputMismatchException e)
{
System.err.println("Bitte für a und b nur Zahlen eingeben!");
scan.nextLine();
}
catch(ArrayIndexOutOfBoundsException e){
scan.nextLine();
}
catch(NumberFormatException e)
{
System.err.println("Bitte nur gültige Rechenoperatoren eingeben!");
return;
}
}
}
}