Java Taschenrechner (Division und Graphische Oberfläsche?
Hallo Community, ich habe ein paar Fragen zu meinem Java Taschenrechner. Am Anfang möchte ich noch sagen das ich erst neu in Java bin und bitte keine besserrichen und herablassenden Antworten zu meinem Taschenrechner möchte.
Hier einmal mein Taschenrechner:
import java.util.Scanner; //Wichtig!
public class Taschenrechner {
public static void main (String [] args) {
System.out.println("Das hier ist ein Taschenrechner!");
System.out.println("Bitte definiere die Variablen: a+b c-d e*f g/h");
Scanner sc = new Scanner(System.in);
double a = sc.nextInt();
System.out.println("Variable a = " +a); // Anzeige für alle eingegebenen Variablen
double b = sc.nextInt();
System.out.println("Variable b = " +b);
double c = sc.nextInt();
System.out.println("Variable c = " +c);
double d = sc.nextInt();
System.out.println("Variable d = " +d);
double e = sc.nextInt();
System.out.println("Variable e = " +e);
double f = sc.nextInt();
System.out.println("Variable f = " +f);
double g = sc.nextInt();
System.out.println("Variable g = " +g);
double h = sc.nextInt();
System.out.println("Variable h = " +h);
// Ab hier die Rechenopperrationen
double z = a + b; //Addition
double y = c - d; //Subtraktion
double x = e * f; //Multiplikation
//Division befindet sich weiter unten in der if Schleife
//Ab hier die Ausgabe der Ergebnise
System.out.println("Das Ergebnis der Addition lautet= " + z);
System.out.println("Das Ergebnis der Subtraktion lautet= " + y);
System.out.println("Das Ergebnis der Multiplikation lautet= " + x);
if (h == 0) {
System.err.println("Division durch 0 ist nicht möglich!");
}
else {
double w = g / h; System.out.println("Das Ergebnis der Division lautet= " +w);
}
}
}
- Wie kann ich meine Eingabe(input) optimieren?
- Wieso bekomme ich bei 50/100 den Wert 0? Ich habe den Datentyp als Double deklariert um genau das nicht zu bekommen. Wo liegt mein Fehler?
- Wie würde das später mit einer Graphischen Oberfläsche aussehen?
PS.: Ich möchte nicht einfach irgend einen Code kopieren sondern auch verstehen was er macht also bitte mit erklärung. Das ganze Programm dient nur zur Übung um meine Java Kenntnisse zu erweitern.
Danke! :)
3 Antworten
Hallo
Du scanst die Double Werte mit nextInt. So werden jeweils die Gannzzahlwerte genommen. Versuche es mit nextDouble.
Um die Eingabe zu optimieren suchst du am besten ein Tutorial, davon gibt es viele.
Danke, das mit nextDouble hat funktioniert! Ich kann jetzt 50/100 rechnen und erhalte 0.5
Nachdem die bereits gegebenen Antworten sehr gut sind und auch bereits einen Großteil deiner Fragen beantworten, würde ich den Punkt mit der Graphischen Oberfläche noch ergänzen:
Persönlich bin ich der Meinung, dass du dir in der heutigen Zeit AWT und Swing fast sparen kannst, da für Grafische Oberflächen der Code wirklich grausam sein kann und auch veraltet ist. - Ich tendiere da eher zu JavaFX. Da ist sowohl die Gestaltung per Code als auch per Designer möglich.
Ich würde dir daher eher raten, schau dir mal JavaFX an.
JavaFX hat nichts mit Eclipse zu tun in dem Sinne. JavaFX ist seit Java7 enthalten. Demnach solltest du einfach nur sicherstellen welches JDK du verwendest.
Zur Frage wie du das Anfängst:
Du erstellst eine Klasse die von Application ableitet:
extends Application
bei Application handelt es sich um eine Abstrakte Klasse, bei der du die Methode start implementieren musst. - In der Main-Methode brauchst du dann nur noch die launch Methode zu starten, die in Application enthalten ist.
Mag sein, dass es sich für einen Anfänger jetzt kompliziert anhört, aber hier ein Beispiel Hallowelt-Programm:
1) Du kannst ein Array oder eine Liste machen für deine Variablen und in einer Schleife jeweils mit dem Scanner befüllen, dann brauchst du den Code nur einmal
2) Versuchs mal mit
w = (double)g / (double)h;
Ich glaube der Kompiler rechnet deine int-Werte aus (100 passt 0 mal in 50) und speichert dann das Ergebnis in einem Double...
3) Grafische Oberfläche...Da kannst du ja einen ganz normalen Taschenrechner Abbilden eigentlich, mit Buttons für die Tasten und so...oder natürlich ein Feld, indem du einen Term eingibst und den im Code auseinanderplückst. Schau dir mal Swing und AWT an :)
Der Cast von g und h ist nicht nötig wenn man nextDouble verwendet. Ansonsten top :)
Danke. Ich werde mich mal über Arrays belesen und schauen wie ich meine Eingabe optimieren kann. Gibt es eine Möglichkeit das mein Programm erkennt welche Rechenoperation es nun verwenden soll? Also so das z.B. meine STandartformel a und b sind und das programm erennt bei der Eingabe von + - * / was es tun soll?
Was bedeutet AWT ausgeschrieben? :)
Da wirst du wohl alle Fälle einzeln abfangen müssen :) Also der Benutzer gibt einen Term ein, du trennst den dann auf, hast einmal A, einmal B und in der Mitte die Rechenoperation. Die musst du selber auswerten und dann rechnen. AWT steht glaub' für "Abstract Window Toolkit"
Stimmt, super! Ich dachte nur, es sollen mit Absicht int's eingelesen werden, und für die Division ist halt dann zwangsläuftig ein double nötig, aber klar! Wenn's keine Einwände gibt, ist nextDouble perfekt.
JavaFX ist das mit in Eclipse enthalten?
Denn ich habe das kleine "Program" mit Eclipse geschrieben.
Wenn ja wie sieht der Anfang in JavaFX aus?