Zidinjo

Untitled

Nov 29th, 2014
260
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.23 KB | None | 0 0
  1. import java.util.Scanner;
  2. import java.text.DecimalFormat;
  3. import java.util.Locale;
  4. import java.util.InputMismatchException;
  5.  
  6. public class TaschenrechnerExtendet3 {
  7.  
  8.         public static void main(String[] args)
  9.         {
  10.                 DecimalFormat df = new DecimalFormat("###,###,###.###"); // Fuer die Uebersichlichkeit sont zu lange Nachkommastellen
  11.                 Locale.setDefault(Locale.GERMAN); // Deutsche Tastatur anstatt . jetzt , moeglich
  12.                
  13.                 String wert = null;
  14.                 char vorzeichen = 0;
  15.                 boolean while_schleife = true;
  16.                 double berechneter_wert = 0.0;
  17.                 double wert_double = 0.0;
  18.                 Scanner scanner, scanner2;
  19.                
  20.                 eingabeHilfe();
  21.                
  22.                 while(while_schleife) // Schleifenbedinung ist true außer wenn wir ein e eingeben dann wird der Boolean auf false gesetzt
  23.                 {
  24.                         try
  25.                         {
  26.                                 System.out.println("Ihr Wert ist  " + df.format(berechneter_wert)+" | e=ende c=clear |");
  27.                                 scanner = new Scanner(System.in); // Konsolen eingabe
  28.                                
  29.                                 wert = scanner.nextLine();
  30.                                 vorzeichen = wert.charAt(0); // char vorzeichen den 0ten Wert zuweisen. z.b + - * /
  31.                                
  32.                                 scanner2 = new Scanner(wert.substring(1)); // substring nach der Stelle 1 der rest in Typ Scanner verweisen
  33.                                
  34.                                 switch (vorzeichen)
  35.                                 {
  36.                                         case 'e': // | "" fuer String |  '' für char | int, double andere werte ist zahl nötig
  37.                                                 while_schleife=false; // Schleife Beendigt !
  38.                                         case 'c':
  39.                                                 berechneter_wert = 0.0;
  40.                                                 break; // break sonst Fehlermeldung wegen Methode vom Scanner !
  41.                                         case '!':
  42.                                                 pruefung_Werte = ganzZahl(berechneter_wert);
  43.                                                 berechneter_wert = fakultaet_berechnung((int)berechneter_wert);
  44.                                                 break;
  45.                                         case '^':
  46.                                                 wert_double = scanner2.nextDouble();
  47.                                                 berechneter_wert = potenz(berechneter_wert ,wert_double);
  48.                                                 break;
  49.                                         case '+':
  50.                                                 wert_double = scanner2.nextDouble();
  51.                                                 berechneter_wert = berechneter_wert + wert_double;
  52.                                                 break;
  53.                                         case '-':
  54.                                                 wert_double = scanner2.nextDouble();
  55.                                                 berechneter_wert = berechneter_wert - wert_double;
  56.                                                 break;
  57.                                         case '*':
  58.                                                 wert_double = scanner2.nextDouble();
  59.                                                 berechneter_wert = berechneter_wert * wert_double;
  60.                                                 break;
  61.                                         case '/':
  62.                                                 wert_double = scanner2.nextDouble();
  63.                                                 if(wert_double != 0.0) // Wenn nextDouble keine 0 vom Substring dann geht if sonst else -> Fehlermeldung
  64.                                                 {
  65.                                                     berechneter_wert = berechneter_wert / wert_double;
  66.                                                 }
  67.                                                 else
  68.                                                 {
  69.                                                     throw new DivisionByZeroException();
  70.                                                 }
  71.                                                 break;
  72.                                         default: // Wenn nichts eingeben wird, dann wird eine Fehlermeldung geworfen mit Verweis auf die Klasse Invalid...
  73.                                                 throw new InvalidOperatorException();
  74.                                 }
  75.                         }
  76.                         catch(DivisionByZeroException e)  // Auffangen (engl. catch) sonst Fehlermeldung nicht möglich
  77.                         {
  78.                                 System.out.println("Fehler --- "+ e +": Division durch 0 \n");
  79.                         }
  80.                         catch(InvalidOperatorException e)
  81.                         {
  82.                                 System.out.println("Fehler --- "+ e +": Unbekannter Operator \n");    
  83.                         }
  84.                         catch(InputMismatchException e)
  85.                         {
  86.                                  System.out.println("Fehler --- "+ e +": Falsches Eingeabeformat \n");
  87.                         }
  88.                         catch(NotNaturalNumberException e)
  89.                         {
  90.                                 System.out.println("Fehler --- "+ e + ": Kein ganzzahliger Wert \n");
  91.                         }
  92.                         catch(Exception e)
  93.                         {
  94.                                 System.out.println("Fehler --- unbekannter Fehler \n");
  95.                         }
  96.                 }
  97.         }      
  98.         static void eingabeHilfe() // EingabeHilfe -> nur 1 mal deshalb oben If Abfrage
  99.         {
  100.                System.out.println("Hallo beim Taschenrechner, die Operatoren + , - , * , ! = Fakultaet , ^ = Potenz / sind erlaubt. Parameter e für Beendigung \n");
  101.         }
  102.        
  103.         static int ganzZahl(double berechneter_wert) throws NotNaturalNumberException // Methode ganzZahl bekommt ein double und gibt ein Int zurück
  104.         {
  105.             double pruefung = berechneter_wert / (int)berechneter_wert;
  106.            
  107.             if(pruefung < (1.0 + Math.pow(10.0,-15.0))) // Pruefung der Bedingung -> Double / int = 1,0
  108.             {      
  109.                 return (int)pruefung;
  110.             }
  111.             else
  112.             {
  113.                 throw new NotNaturalNumberException();
  114.             }              
  115.         }
  116.        
  117.         static  int fakultaet_berechnung(int berechneter_wert)
  118.         {
  119.             int fakultaet = 1; // wie bei der Fakultaet -  muss 1 sein ! Sonst nicht Matherror bro how blow
  120.             boolean forschleife = false; // Abschluss der If Abfrage mit Integer.Max_Value -> sonst zu oft eingezeigt wenn mehr als overflow ist
  121.            
  122.             for(int i =1; i <= berechneter_wert && forschleife == false; i++) // Fakultaet Bedingung i <= eingabe; Bei 5 nur 5 durchläufe
  123.             {
  124.                 try
  125.                 {
  126.                     if((Integer.MAX_VALUE/i)<fakultaet) //Int Max Value = 2.147.483.647
  127.                     {
  128.                         forschleife = true;
  129.                         throw new ResultErrorException(); // Wirft Overflow Exception
  130.                     }
  131.                     fakultaet = fakultaet * i;
  132.                 }
  133.                 catch (ResultErrorException e)
  134.                 {
  135.                         System.out.println("Fehler --- "+ e +": Integer-Overflow \n");
  136.                         fakultaet = berechneter_wert; // Wichtig damit wir den vorherigen Wert haben, sonst ist das der Overflow wert oder 1
  137.                 }
  138.             }
  139.             return fakultaet;
  140.         }
  141.        
  142.         static double potenz(double a, double b) throws InvalidExponentException, NotNaturalNumberException
  143.         {
  144.             double potenz_rechnung = 0.0; // Initialisierung der Variable Potenz_Rechnung
  145.             double pruefung = 0.0;
  146.             pruefung = ganzZahl(b);
  147.            
  148.                 if(pruefung == 1.0 && b > 0.0)
  149.                 {      
  150.                     potenz_rechnung = a;
  151.                     for (double i = 1.0; i < b; i++)  // Schleife wird so lange ausgeführt bis i(Zähler) den Exponenten erreicht hat.
  152.                     {
  153.                         potenz_rechnung = potenz_rechnung * a;
  154.                     }
  155.                 }
  156.                 else
  157.                 {
  158.                     throw new InvalidExponentException();
  159.                 }
  160.             return potenz_rechnung;
  161.         }
  162. }
  163. class DivisionByZeroException extends Exception // Etliche Klassen ... für die Exceptions
  164. {
  165.         private static final long serialVersionUID = 1L;
  166. }
  167.  
  168. class ResultErrorException extends Exception
  169. {
  170.         private static final long serialVersionUID = 1L;
  171. }
  172.  
  173. class InvalidOperatorException extends Exception
  174. {
  175.         private static final long serialVersionUID = 1L;
  176. }
  177.  
  178. class InvalidExponentException extends Exception
  179. {
  180.         private static final long serialVersionUID = 1L;
  181. }
  182.  
  183. class NotNaturalNumberException extends Exception
  184. {
  185.         private static final long serialVersionUID = 1L;
  186. }
Advertisement
Add Comment
Please, Sign In to add comment