Einleitung
Eines der naheliegendsten Progrämmchen was ein jeder Entwickler einmal entwickelt hat (oder haben sollte)
ist ohne Zweifel wohl ein Taschenrechner.
Und das ist auch der Grund, wieso wir noch bevor wir die Feature-Matrix von Java durchgehen und vergleichen,
noch einen kleinen Abstecher bei einem solch einfachen Source-Code machen.
Um das ganze aber nicht allzu weit zu treiben, sollen die Grundrechenarten und zusätzlich das Quadrieren
und Wurzel-ziehen implementiert werden. Um die Stärken und Schwächen zwischen Java und Delphi ein
kleines bisschen herauszukitzeln, werden wir zwei verschiedene Taschenrechner entwickeln. Der erste
soll lediglich über die Kommandozeile nutzbar werden. Heutzutage eigentlich nicht mehr als richtige
große Anwendung denkbar (zumindest als "Otto-Normal-Verbraucher"). Die zweite Version des Taschenrechners
soll über eine grafische Oberfläche bedient werden können. Um hier allerdings nicht zu tief in die
Java-Framework-Thematik eintauchen zu müssen, werden wir Swing zur GUI-Generierung nutzen. In Delphi ist
das alles etwas anders. Auch hier nutzen wir eine Konsolen-Anwendung als erstes Projekt und dann eben das
normale Delphi (auch ohne Dritt-Hersteller-Komponenten) um auch hier bei den "Basics" zu bleiben.
Und nun viel Spaß beim weiteren nachvollziehen und/oder bearbeiten der einzelnen Schritte.
Ein Taschenrechner als Konsolen-Anwendung
Da wir in Java grundsätzlich erst mal mit Konsolenanwendungen arbeiten, ist es auch für den
Taschenrechner die einfachste Möglichkeit ein Beispielprogramm zu schreiben. Wir halten uns
an die Grundrechenarten: Addition, Subtraktion, Multiplikation und die Division. Dabei reduzieren
wir den Zahlenraum zusätzlich auf einfache Integer-Werte, was bei der Division bedeutet, dass wir
eine Ganzzahldivision ohne Rest durchführen.
Und hier erstmal der Java-Quellcode von mir. Wer möchte, kann das natürlich selbst versuchen oder
aber auch ein ganz anderen Ansatz (Vielleicht Klassenbasiert?) nutzen; ich hatte mich für den rein
Funktionalen Ansatz reduziert, damit die beiden Beispiele etwas einfacher verglichen werden können.
Die GUI-Version nachher wird noch kompliziert genug.
public class Main { private static int eingabeInt1; private static int eingabeInt2; public static void main(String[] args) { System.out.println("Eingabe: Welche Berechnung soll durchgeführt werden?"); System.out.println("+ - * /"); System.out.print("Eingabe:"); Scanner scanner = new Scanner(System.in); char eingabeChr = ((String) scanner.next()).charAt(1); System.out.println("Erste Zahl:"); System.out.print("Eingabe:"); eingabeInt1 = scanner.nextInt(); System.out.println("Zweite Zahl:"); System.out.print("Eingabe:"); eingabeInt2 = scanner.nextInt(); System.out.println("Ergebnis:"); // seit Java 14 (bzw. Preview-Feature von Java 13) gibt es die sog. // enhanced Switch Expression: switch (eingabeChr) { case '+' -> calcSumme(); case '-' -> calcDifferenz(); case '*' -> calcProdukt(); case '/' -> calcQuotient(); default -> System.out.println("Ungültiges Rechenzeichen..."); } /* Vor Java 14 switch (eingabeChr) { case '+': calcSumme(); break; case '-': calcDifferenz(); break; case '*': calcProdukt(); break; case '/': calcQuotient(); break; default: System.out.println("Ungültiges Rechenzeichen..."); }*/ System.out.println("Programm wird beendet."); scanner.next(); // warten scanner.close(); } private static void calcSumme() { System.out.println(eingabeInt1+eingabeInt2); } private static void calcDifferenz() { System.out.println(eingabeInt1-eingabeInt2); } private static void calcProdukt() { System.out.println(eingabeInt1*eingabeInt2); } private static void calcQuotient() { System.out.println(eingabeInt1/eingabeInt2); } } |
todo
program Taschenrechner_Konsole; \{$APPTYPE CONSOLE} \{$R *.res} uses System.SysUtils; var eingabeStr : String; eingabeInt1, eingabeInt2 : Integer; procedure calcSumme; begin Writeln(eingabeInt1 + eingabeInt2); end; procedure calcDifferenz; begin Writeln(eingabeInt1 - eingabeInt2); end; procedure calcProduct; begin Writeln(eingabeInt1 * eingabeInt2); end; procedure calcQuotient; begin Writeln(eingabeInt1 div eingabeInt2); end; begin try Writeln('Eingabe: Welche Berechnung soll durchgeführt werden?'); Writeln('+ - * /'); Write('Eingabe:'); Readln(eingabeStr); Writeln('Erste Zahl:'); Write('Eingabe:'); Readln(eingabeInt1); Writeln('Zweite Zahl:'); Write('Eingabe:'); Readln(eingabeInt2); Write('Ergebnis:'); case eingabeStr[1] of '+' : calcSumme; '-' : calcDifferenz; '*' : calcProduct; '/' : calcQuotient; else Writeln('Ungültiges Rechenzeichen... '); end; Writeln('Programm wird beendet.'); Readln; except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end. |
todo
GitHub blubb