4 Grundrechenarten auf der Kommandozeile: Unterschied zwischen den Versionen

Aus Byte-Welt Wiki
Zur Navigation springenZur Suche springen
K
K
 
(4 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
 
In diesem Code-Beispiel bauen wir uns einen Rechner für die Kommandozeile.
 
In diesem Code-Beispiel bauen wir uns einen Rechner für die Kommandozeile.
  
Die hier vorgestellte Klasse CommandCalc berechnet das Ergebnis einer Grundrechenart-Operation mit zwei Operanden. Dabei erwartet sie die Teile der Rechenaufgabe als Argumente beim Start des Programms.
+
Die hier vorgestellte [[Klasse]] CommandCalc berechnet das Ergebnis einer Grundrechenart-Operation mit zwei Operanden. Dabei erwartet sie die Teile der Rechenaufgabe als [[Argument|Argumente]] beim Start des Programms.
  
 
'''Beispiel:'''
 
'''Beispiel:'''
 
  java CommandCalc 3,2 x 5,8
 
  java CommandCalc 3,2 x 5,8
Das Beispiel startet eine Multiplikation. Üblicherweise wird bei einer Multiplikation das Sternchen als Operator eingesetzt. Da das Sternchen aber auf den Kommandozeilen der bekannten Betriebssysteme bereits eine Wildcard-Funktion inne hat, benutzen wir ersatzweise das <code>x</code>.
+
Das Beispiel startet eine Multiplikation. Üblicherweise wird bei einer Multiplikation das Sternchen (*) als [[Operator]] eingesetzt. Da das Sternchen aber auf den Kommandozeilen der bekannten [[Betriebssystem|Betriebssysteme]] bereits eine Wildcard-Funktion inne hat, benutzen wir ersatzweise das <code>x</code>.
  
 
<syntaxhighlight lang="java">
 
<syntaxhighlight lang="java">
import static java.util.Locale.GERMANY;
+
import java.text.DecimalFormat;
  
 
/**
 
/**
  * CommandCalc berechnet das Ergebnis einer Grundrechenart-Operation mit zwei Operanden.
+
  * CommandCalc berechnet das Ergebnis einer Rechenoperation mit zwei Operanden.
  *  
+
  *
 
  * @author Gernot Segieth
 
  * @author Gernot Segieth
 
  */
 
  */
 
public class CommandCalc {
 
public class CommandCalc {
 +
  private static DecimalFormat formatter = new DecimalFormat("#.###");
 +
 
   public static void main(String[] args) {
 
   public static void main(String[] args) {
 
       if(args.length == 3 && checkArgs(args)) {
 
       if(args.length == 3 && checkArgs(args)) {
 
         System.out.print(args[0] +" "+ args[1] +" "+ args[2] +" = ");
 
         System.out.print(args[0] +" "+ args[1] +" "+ args[2] +" = ");
 +
       
 +
        double value1 = parse(args[0]);
 +
        double value2 = parse(args[2]);
 +
        double result = 0;
 +
       
 
         switch(args[1]) {
 
         switch(args[1]) {
 
             case "+":
 
             case "+":
               System.out.format(GERMANY, "%f%n", addition(parse(args[0]), parse(args[2])));
+
               result = addition(value1, value2);
 
               break;
 
               break;
 
             case "-":
 
             case "-":
               System.out.format(GERMANY, "%f%n", subtraction(parse(args[0]), parse(args[2])));
+
               result = subtraction(value1, value2);
 
               break;
 
               break;
 
             case "x":
 
             case "x":
               System.out.format(GERMANY, "%f%n", multiplication(parse(args[0]), parse(args[2])));
+
               result = multiplication(value1, value2);
 
               break;
 
               break;
 
             case "/":
 
             case "/":
               System.out.format(GERMANY, "%f%n", division(parse(args[0]), parse(args[2])));
+
               result = division(value1, value2);
 
               break;
 
               break;
 
             default:
 
             default:
               System.out.println("Unzulässiger Operator!");
+
               System.out.println("[FEHLER]\nUnzulässiger Operator!");
 +
              return;
 
         }
 
         }
         System.out.println();
+
         out(result);
 
       } else {
 
       } else {
 
         System.out.println("CommandCalc, 2015 - Gernot Segieth");
 
         System.out.println("CommandCalc, 2015 - Gernot Segieth");
Zeile 41: Zeile 49:
 
         System.out.println("Verwendungsbeispiel:\njava CommandCalc 5 + 8");
 
         System.out.println("Verwendungsbeispiel:\njava CommandCalc 5 + 8");
 
       }
 
       }
 +
  }
 +
 +
  private static void out(double value) {
 +
      System.out.println(formatter.format(value));
 
   }
 
   }
  
Zeile 77: Zeile 89:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
[[Kategorie:Java]]
 
 
[[Kategorie:Java Grundlagen]]
 
[[Kategorie:Java Grundlagen]]
 
[[Kategorie:Java-Codeschnipsel]]
 
[[Kategorie:Java-Codeschnipsel]]

Aktuelle Version vom 13. August 2019, 17:12 Uhr

In diesem Code-Beispiel bauen wir uns einen Rechner für die Kommandozeile.

Die hier vorgestellte Klasse CommandCalc berechnet das Ergebnis einer Grundrechenart-Operation mit zwei Operanden. Dabei erwartet sie die Teile der Rechenaufgabe als Argumente beim Start des Programms.

Beispiel:

java CommandCalc 3,2 x 5,8

Das Beispiel startet eine Multiplikation. Üblicherweise wird bei einer Multiplikation das Sternchen (*) als Operator eingesetzt. Da das Sternchen aber auf den Kommandozeilen der bekannten Betriebssysteme bereits eine Wildcard-Funktion inne hat, benutzen wir ersatzweise das x.

import java.text.DecimalFormat;

/**
 * CommandCalc berechnet das Ergebnis einer Rechenoperation mit zwei Operanden.
 *
 * @author Gernot Segieth
 */
public class CommandCalc {
   private static DecimalFormat formatter = new DecimalFormat("#.###");

   public static void main(String[] args) {
      if(args.length == 3 && checkArgs(args)) {
         System.out.print(args[0] +" "+ args[1] +" "+ args[2] +" = ");
         
         double value1 = parse(args[0]);
         double value2 = parse(args[2]);
         double result = 0;
         
         switch(args[1]) {
            case "+":
               result = addition(value1, value2);
               break;
            case "-":
               result = subtraction(value1, value2);
               break;
            case "x":
               result = multiplication(value1, value2);
               break;
            case "/":
               result = division(value1, value2);
               break;
            default:
               System.out.println("[FEHLER]\nUnzulässiger Operator!");
               return;
         }
         out(result);
      } else {
        System.out.println("CommandCalc, 2015 - Gernot Segieth");
        System.out.println("Zulässige Operatoren: + - x /");
        System.out.println("Verwendungsbeispiel:\njava CommandCalc 5 + 8");
      }
   }

   private static void out(double value) {
      System.out.println(formatter.format(value));
   }

   private static boolean checkArgs(String[] args) {
      /*
       * Regex Erklärung:
       * - die zahl hat optional an erster Stelle ein negatives Vorzeichen
       * - darauf folgt mindestens eine Ziffer
       * - optional: (die Zahl darf einen Punkt oder Komma enthalten
       * - nach dem Punkt oder Komma endet die Zahl mit mindestens einer weiteren Ziffer)
       */
      String pattern = "^[-]?\\d+([.,]\\d+)?$";
      return args[0].matches(pattern) && args[2].matches(pattern);
   }

   private static double parse(String arg) {
      return Double.parseDouble(arg.replace(',', '.'));
   }

   private static double addition(double arg1, double arg2) {
      return arg1 + arg2;
   }

   private  static double subtraction(double arg1, double arg2) {
      return arg1 - arg2;
   }

   private static double multiplication(double arg1, double arg2) {
      return arg1 * arg2;
   }

   private static double division(double arg1, double arg2) {
      return arg1 / arg2;
   }
}