Taschenrechner mit Java programmieren (für Anfänger)

Taschenrechner mit Java programmieren (für Anfänger)

Online Compiler

Ich verwende in diesem Artikel den Online Compiler JDoodle. An dieser Stelle möchte ich auch JDoodle empfehlen. Die Webanwendung besitzt die Fähigkeit Code in vielen verschiedenen Sprachen zu kompilieren und auszuführen. Es können Projekte im eigenen Account abgespeichert werden, man kann seinen Quelltext als Datei runterladen und das ganze ist kostenlos. Gerade für kleinere Aufgaben wo Konsolenausgaben ausreichen ein sehr praktisches Tool, welches auch von überall erreicht und benutzt werden kann.

Keine Oberfläche

Der Taschenrechner, welchen wir hier programmieren, nimmt zwei Zahlen und eine Rechenoperation als Eingabe. Der Artikel richtet sich komplett an Anfänger und behandelt grundlegende Themen. Es wird keine Oberfläche entwickelt sondern nur mit Konsolenausgaben und Eingaben gearbeitet.

Die Main

C++ und Java haben viele Gemeinsamkeiten, unter anderem die Main Funktion. Sie ist das Herzstück jeder Java Anwendung Unsere schlauen Endgeräte springen immer als erstes in die Main und arbeiten Zeile für Zeile ihren Inhalt ab. Das ist eine wichtige Information, die man gerade als Anfänger im Kopf behalten sollte. Es bedeutet nämlich, dass egal wie Komplex die Anwendung auch sein mag (selbst wenn es 100 Dateien und aber tausend Zeilen sind), alles fängt in der Main Funktion an.

In Java sieht die einfachste Datei also so aus:

public class EineKlasse
{
public static void main(String args[])
{

}
}

Der fertig programmierte Taschenrechner soll mit zwei Zahlen arbeiten und die Grundoperationen beherrschen. Alles was wir also brauchen sind zwei Variablen und ein paar Bedingungen.

// ...in der Main
int x = 0;
int y = 0;

Alles noch ziemlich unspektakulär, oder?

Konsolenausgabe und Eingabe

Um in der Konsole etwas auszugeben brauchen wir Zugriff auf das Betriebssystem, welches auch die Konsole bereitstellt. Wer diese Logik versteht, kann sich auch besser die Schreibweise merken. Generell gilt, dass es manchmal reicht die Idee hinter den Schlüsselwörtern, Klassen und Methoden zu verstehen, um sich diese zu merken. Manche Entwicklungsumgebungen helfen einem sogar sich zu erinnern, also reicht es manchmal sich nur Teile zu merken, wie z.B System.

// println = print line = drucke zeile
System.out.println("Hallo!");

Wir brauchen allerdings für unseren Taschenrechner sinnvollere Text Ausgaben, wie wäre es mit folgendem.

System.out.println("Bitte erste Zahl eingeben:");
System.out.println("Bitte zweite Zahl eingeben:");
System.out.println("Ergebnis:");

Jetzt müssen wir noch auf Eingaben warten und uns diese abholen, also vervollständigen wir das ganze.

**Scanner scanner = new Scanner(System.in);

System.out.println("Bitte erste Zahl eingeben:");
**x = scanner.nextLine();
System.out.println("Bitte zweite Zahl eingeben:");
**y = scanner.nextLine();
System.out.println("Ergebnis:");

Das Scanner Objekt kümmert sich um den Eingabe-Strom der Konsole (System.in). Führt man das ganze aus, erhält man zwei Fehlermeldungen, wieso?

import .*

Java weiß nicht alles. Um ehrlich zu sein ist Java wie viele andere Programmiersprachen ziemlich beschränkt. Der Kern hat hauptsächlich nur gelernt mit Systemen zu kommunizieren. Es würde auch beschränkt bleiben, wären da nicht diese unverständlichen import Anweisungen. Diese Sorgen nämlich dafür, dass Java einen größeren Funktionsumfang bekommt. Man kann sich das ungefähr so vorstellen, dass Java erst schlauer wird und Dinge versteht, wenn es die Themen relevanten Bücher parat hat. Geht es um neuronale System, benötigt es ein Buch über neuronale Systeme, geht es um Bankwesen, braucht es ein Buch über Bankwesen usw.

import java.util.*;

Mit dieser Importanweisung versteht Java viele neue Dinge. Unter anderem was ein "Scanner" ist.

Zeichenketten zu Zahlen

Wenn wir auf einem Blatt x = 50 schreiben, weiß jeder Mensch, dass es sich bei 50 um eine Zahl handelt. Der Computer allerdings ist sich nie 100% sicher worum es geht und was von ihm genau gewollt ist. Das x könnte beispielsweise für den Rechner ebenfalls eine Zahl darstellen. Deshalb will der Computer immer relativ strikt wissen, was Zeichenkette und was Zahl ist. Deshalb gibt es auch verschiedene Variablentypen. Und wiederum deshalb kann eine Variable vom Typ int, welche für Zahlen gedacht ist, keine Zeichenkette ohne weiteres annehmen.

Java ist allerdings eine sehr komfortable Programmiersprache und bietet viele interne Lösungen für solche Probleme an.

x = Integer.parseInt(scanner.nextLine());

Die Zeichenkette wird in eine ganze Zahl konvertiert und dann an Variable x übergeben.

Bedingungen (if, else if, else)

Da wir nicht nur eine Rechenoperation einbauen wollen, sondern mehrere, brauchen wir zwei Dinge: Eine weitere Konsoleneingabe um festzulegen mit welchem Operator gerechnet werden soll und Bedingungen um dem Computer mitzuteilen, was dieser eingegebene Operator auslösen soll. Klingt alles komplizierter als es ist.

System.out.println("Bitte Operator eingeben:");
String operator = scanner.nextLine();

if(operator.equals("+"))
{
System.out.println(x+y);
}
else if(operator.equals("-"))
{
System.out.println(x-y);
}
else if(operator.equals("*"))
{
System.out.println(x*y);
}
else
{
System.out.println(x/y);
}

Es wird die Eingabe mit scanner.nextLine(); abgeholt und an ein String Objekt weitergegeben. Strings haben die tolle Methode equals um zu prüfen ob ein anderer String x identisch ist. Wenn kein passender Fall gefunden wird, wird immer eine Division ausgeführt.

Man könnte jetzt übrigens auch die Formel ausgeben:

System.out.println(x+operator+y+"=");

1 geteilt durch 2 = 0?

Wer versucht hat mit unserem momentanen Taschenrechner 1 durch 2 zu teilen, erhält als Ergebnis 0. Warum? Ganz einfach, unsere Variablen x und y sind beide vom Typ integer. Es sind also Ganzzahlen. Wie zuvor erwähnt, weiß der Computer nie so Recht was man eigentlich von ihm will. Er weiß nicht, dass wir einen Taschenrechner programmieren und 1/2 = 0 für uns in diesem Fall ein unverhofftes und falsches Ergebnis ist... Es sei denn man sagt es ihm. Und das tut man mit dem Variablentypen. Wir wollen also bei unserem Taschenrechner auch Dezimalzahlen/Kommazahlen als Ergebnis erhalten, also müssen wir unsere Variablen vom Typen integer in float ändern.

float x = 0;
float y = 0;

Gesamter Quelltext

Zu guter Letzt, der gesamte Taschenrechner.

import java.util.*;

public class MyClass 
{
public static void main(String args[])
{
Scanner scanner = new Scanner(System.in);
int x = 0;
int y = 0;

System.out.println("Erste Zahl eingeben:");
x = Integer.parseInt(scanner.nextLine());
System.out.println("Zweite Zahl eingeben:");
y = Integer.parseInt(scanner.nextLine());
System.out.println("Bitte Operator eingeben:");
String operator = scanner.nextLine();
System.out.println(x+operator+y+"=");

if(operator.equals("+"))
{
System.out.println(x+y);
}
else if(operator.equals("-"))
{
System.out.println(x-y);
}
else if(operator.equals("*"))
{
System.out.println(x*y);
}
else
{
System.out.println(x/y);
}
}
}

Um die Konsoleneingaben in JDoodle zu simulieren, muss man in das stdin inputs Textfeld die Eingaben in der richtigen Reihenfolge und mit Zeilenumbrüchen getrennt eingeben.

Nächste Seite
Aufgabe (Übung)
Hinterlasse gerne einen Like oder Kommentar (~‾▿‾)~
Name Text