Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Scanner;
- import java.text.DecimalFormat;
- import java.util.Locale;
- public class Taschenrechner {
- public static void main(String[] args){
- DecimalFormat df = new DecimalFormat("###,###,###.###"); // Fuer die Uebersichlichkeit sont zu lange Nachkommastellen
- Locale.setDefault(Locale.GERMAN); // Deutsche Tastatur anstatt . jetzt , moeglich
- String wert; char vorzeichen = 0; Boolean while_schleife = true; // String/Char/Boolean Variablen
- double berechneter_wert = 0; double wert_double = 0; // Double Variablen
- Scanner scanner, scanner2; // Scanner Variablen
- System.out.println("Hallo beim Taschenrechner, die Operatoren + , - , * , / sind erlaubt. Parameter e für Beendigung \n");
- while(while_schleife) // Schleifenbedinung ist true außer wenn wir ein e eingeben dann wird der Boolean auf false gesetzt
- {
- try
- {
- eingabeHilfe();
- System.out.println("Ihr Wert ist " + df.format(berechneter_wert)+" | e=ende c=clear |");
- scanner = new Scanner(System.in); // Konsolen eingabe
- wert = scanner.nextLine();
- vorzeichen = wert.charAt(0); // char vorzeichen den 0ten Wert zuweisen. z.b + - * /
- scanner2 = new Scanner(wert.substring(1)); // substring nach der Stelle 1 der rest in Typ Scanner verweisen
- switch (vorzeichen)
- {
- case 'e': // | "" fuer String | '' für char | int, double andere werte ist zahl nötig
- while_schleife=false; // Schleife Beendigt !
- case 'c':
- berechneter_wert = 0.0;
- break; // break sonst Fehlermeldung wegen Methode vom Scanner !
- case '+':
- wert_double = scanner2.nextDouble();
- berechneter_wert = berechneter_wert + wert_double;
- break;
- case '-':
- wert_double = scanner2.nextDouble();
- berechneter_wert = berechneter_wert - wert_double;
- break;
- case '*':
- wert_double = scanner2.nextDouble();
- berechneter_wert = berechneter_wert * wert_double;
- break;
- case '/':
- wert_double = scanner2.nextDouble();
- if(wert_double != 0) // Wenn nextDouble keine 0 vom Substring dann geht if sonst else -> Fehlermeldung
- {
- berechneter_wert = berechneter_wert / wert_double;
- break;
- }
- else
- {
- throw new DivisionByZeroException();
- }
- default: // Wenn nichts eingeben wird, dann wird eine Fehlermeldung geworfen mit Verweis auf die Klasse Invalid...
- throw new InvalidOperatorException();
- }
- }
- catch(DivisionByZeroException e) // Auffangen (engl. catch) sonst Fehlermeldung nicht möglich
- {
- System.out.println("Fehler --- "+ e +": Division durch 0 \n");
- }
- catch(InvalidOperatorException e)
- {
- System.out.println("Fehler --- "+ e +": Unbekannter Operator \n");
- }
- catch(Exception e)
- {
- System.out.println("Fehler --- unbekannter Fehler \n");
- }
- }
- }
- static void eingabeHilfe()
- {
- System.out.println("Bitte Operationen z.B +9 eingaben oder *8 \n");
- }
- }
- class DivisionByZeroException extends Exception // Klasse Division... hat die Attribute von Exception geerbt deshalb extends !
- {
- private static final long serialVersionUID = 1L; // Unnoeetig eigentlich - Identifizierung möglich mit default gesetzt 1L
- DivisionByZeroException()
- {
- }
- }
- class InvalidOperatorException extends Exception
- {
- private static final long serialVersionUID = 1L;
- InvalidOperatorException()
- {
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement