Advertisement
Zidinjo

Taschenrechner Loesung

Nov 7th, 2014
203
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.48 KB | None | 0 0
  1. import java.util.Scanner;
  2. import java.text.DecimalFormat;
  3. import java.util.Locale;
  4.  
  5. public class Taschenrechner {
  6.  
  7.     public static void main(String[] args){
  8.        
  9.         DecimalFormat df = new DecimalFormat("###,###,###.###"); // Fuer die Uebersichlichkeit sont zu lange Nachkommastellen
  10.         Locale.setDefault(Locale.GERMAN); // Deutsche Tastatur anstatt . jetzt , moeglich
  11.        
  12.         String wert; char vorzeichen = 0; Boolean while_schleife = true; // String/Char/Boolean Variablen
  13.         double berechneter_wert = 0; double wert_double = 0; int counter =0; // Double Variablen
  14.         Scanner scanner, scanner2; // Scanner Variablen
  15.        
  16.         System.out.println("Hallo beim Taschenrechner, die Operatoren + , - , * , / sind erlaubt. Parameter e für Beendigung \n");
  17.        
  18.         while(while_schleife) // Schleifenbedinung ist true außer wenn wir ein e eingeben dann wird der Boolean auf false gesetzt
  19.         {
  20.             try
  21.             {
  22.                 if(counter ==0) // Hilfestellung nur beim ersten Aufruf !
  23.                 {
  24.                     System.out.println("Bitte Operationen z.B +9 eingaben oder *8 \n");
  25.                     counter= 1;
  26.                 }
  27.                
  28.                 System.out.println("Ihr Wert ist  " + df.format(berechneter_wert)+" | e=ende c=clear |");
  29.                 scanner = new Scanner(System.in); // Konsolen eingabe
  30.                
  31.                 wert = scanner.nextLine();
  32.                 vorzeichen = wert.charAt(0); // char vorzeichen den 0ten Wert zuweisen. z.b + - * /
  33.                
  34.                 scanner2 = new Scanner(wert.substring(1)); // substring nach der Stelle 1 der rest in Typ Scanner verweisen
  35.                
  36.                 switch (vorzeichen)
  37.                 {
  38.                     case 'e': // | "" fuer String |  '' für char | int, double andere werte ist zahl nötig
  39.                         while_schleife=false; // Schleife Beendigt !
  40.                     case 'c':
  41.                         berechneter_wert = 0.0;
  42.                         break; // break sonst Fehlermeldung wegen Methode vom Scanner !
  43.                     case '+':
  44.                         wert_double = scanner2.nextDouble();
  45.                         berechneter_wert = berechneter_wert + wert_double;
  46.                         break;
  47.                     case '-':
  48.                         wert_double = scanner2.nextDouble();
  49.                         berechneter_wert = berechneter_wert - wert_double;
  50.                         break;
  51.                     case '*':
  52.                         wert_double = scanner2.nextDouble();
  53.                         berechneter_wert = berechneter_wert * wert_double;
  54.                         break;
  55.                     case '/':
  56.                         wert_double = scanner2.nextDouble();
  57.                         if(wert_double != 0) // Wenn nextDouble keine 0 vom Substring dann geht if sonst else -> Fehlermeldung
  58.                         {
  59.                             berechneter_wert = berechneter_wert / wert_double;
  60.                             break;
  61.                         }
  62.                         else
  63.                         {
  64.                             throw new DivisionByZeroException();
  65.                         }
  66.                     default: // Wenn nichts eingeben wird, dann wird eine Fehlermeldung geworfen mit Verweis auf die Klasse Invalid...
  67.                         throw new InvalidOperatorException();
  68.                 }
  69.             }
  70.             catch(DivisionByZeroException e)  // Auffangen (engl. throw) sonst Fehlermeldung nicht möglich
  71.             {
  72.                 System.out.println("Fehler --- "+ e +": Division durch 0 \n");
  73.             }
  74.             catch(InvalidOperatorException e)
  75.             {
  76.                 System.out.println("Fehler --- "+ e +": Unbekannter Operator \n"); 
  77.             }
  78.             catch(Exception e)
  79.             {
  80.                 System.out.println("Fehler --- unbekannter Fehler \n");
  81.             }
  82.         }
  83.     }  
  84. }
  85. class DivisionByZeroException extends Exception // Klasse Division... hat die Attribute von Exception geerbt deshalb extends !
  86. {
  87.     private static final long serialVersionUID = 1L; // Unnoeetig eigentlich - Identifizierung möglich mit default gesetzt 1L
  88.     DivisionByZeroException()
  89.     {    
  90.     }
  91. }
  92.  
  93. class InvalidOperatorException extends Exception
  94. {
  95.     private static final long serialVersionUID = 1L;
  96.     InvalidOperatorException()
  97.     {
  98.     }
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement