Java Taschenrechner // Code nicht Anfängerfreundlich =0
Hallo,
ich begonnen Java zu lernen und als kleine Aufgabe habe ich mir vorgenommen einen kleinen Taschenrechner zu erstellen.
Ich muss ehrlich sagen, dass es in C++ wirklich einfacher ist eine TR zu schreiben als in Java, vor allem, weil der gesammte Code in C++ kürzer und einfacher ist. Oder kann man das auch kürzer zusammenfassen in Java?
public class Rechner {
public static void main(String[] args) {
System.out.print("Geben Sie eine Zahl ein: ");
double x = new java.util.Scanner(System.in).nextDouble();
System.out.print("+,-,*,/");
char operator = new java.util.Scanner(System.in).nextLine().charAt(0);
System.out.print("Geben Sie die zweite Zahl ein: ");
double y = new java.util.Scanner(System.in).nextDouble();
switch(operator) {
case '+':
System.out.println(x + y);
break;
case '-':
System.out.println(x - y);
break;
case '*':
System.out.println(x * y);
break;
case '/':
System.out.println(x / y);
default:
System.out.println("Falsches Argument");
break;
}
}
}
Das liegt vielleicht daran, dass man in C++ so wie in jeder anderen Programmiersprache die Variablen am Anfang deklariert, die nötigen Imports nimmt und somit Klassen "normal" erstellt.
Was du jedoch da machst ist, du importes die java.util nicht, somit gibst du den ganzen Pfad an wenn du den Scanner erstellst. Zweitens erstellst du eine Variable immer nach einem S.o.p. was naja, wie soll ich das sagen, wie oben beschrieben solltest die Variablen am Anfang deklarieren und erst danach initialisieren.
Am Ende kommt es aufs selbe raus, was die länge angeht.
Edit: Mein Taschenrechner in C, den ich damals gemacht habe(als ich angefangen hab C zu lernen), war vielleicht doppelt solang als deins oder die meisten anderen Taschenrechner. =>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
/* Bool definieren */
typedef int BOOL;
#define TRUE 1
#define FALSE 0
/* Prototypen f�r die einzelnen Funktionen definieren */
int addition(int, int);
int subtraktion(int, int);
int division(int, int);
int multiplikation(int, int);
/* Ein Pointer Array f�r die Funktionen */
int (*operation[4])(int,int);
int main(int argc, char* argv[])
{
int checkZ1, checkZ2;
int zahl1 = 0;
int zahl2 = 0;
char z;
int add = 0, sub = 0, div = 0, mult = 0;
BOOL rechne = TRUE;
*operation = addition;
*(operation + 1) = subtraktion;
*(operation + 2) = division;
*(operation + 3) = multiplikation;
do{
printf("Bitte geben Sie die erste Zahlen an, mit der Sie rechnen wollen! \n");
checkZ1 = scanf("%d", &zahl1);
printf("Bitte geben Sie die zweite Zahlen an, mit der Sie rechnen wollen! \n");
checkZ2 = scanf("%d", &zahl2);
printf("Bitte geben Sie an was fuer eine Operation sie durchfuehren wollen! (+|-|/|*)\n");
scanf("%s", &z);
if(checkZ1 != 1 || checkZ2 != 1)
{
printf("\nFalsche Eingabe!\nBitte eine Zahl eingeben!\n");
rechne = TRUE;
}else
{
rechne = FALSE;
switch(z)
{
case '+':
add = (*operation[0])(zahl1, zahl2);
printf("%d", add);
break;
case '-':
sub = (*operation[1])(zahl1, zahl2);
printf("%d", sub);
break;
case '/':
if(zahl2>0)
{
div = (*operation[2])(zahl1, zahl2);
printf("%d", div);
break;
}else
{
printf("Sie duerfen den Nenner nicht Null oder kleiner Null setzen!");
rechne = TRUE;
break;
}
case '*':
mult = (*operation[3])(zahl1, zahl2);
printf("%d", mult);
break;
default:
printf("Sie haben keines dieser Zeichen eingegeben!!! (+|-|/|*)\n");
rechne = TRUE;
break;
}
}
}while(rechne == TRUE);
getch();
return EXIT_SUCCESS;
}
/* Funktion die zwei Zahlen addiert */
int addition(int zahl1, int zahl2)
{
return zahl1+zahl2;
}
/* Funktion die zwei Zahlen subtrahiert */
int subtraktion(int zahl1, int zahl2)
{
return zahl1-zahl2;
}
/* Funktion die zwei Zahlen dividiert */
int division(int zahl1, int zahl2)
{
return zahl1/zahl2;
}
/* Funktion die zwei Zahlen multipliziert */
int multiplikation(int zahl1, int zahl2)
{
return zahl1*zahl2;
}
Das liegt vielleicht daran, dass man in C++ so wie in jeder anderen Programmiersprache die Variablen am Anfang deklariert,
Zweitens erstellst du eine Variable immer nach einem S.o.p. was naja, wie soll ich das sagen, wie oben beschrieben solltest die Variablen am Anfang deklarieren und erst danach initialisieren.
Seit wann deklariert man Variablen am Anfang? Das wird total unübersichtlich je länger die Funktion wird.
Was ist ein S.o.p. und warum sollte der die Variable nicht danach erstellen?
Seit wann deklariert man Variablen am Anfang? Das wird total unübersichtlich je länger die Funktion wird.
Was wär daran unübersichtlich? Gerade wegen der Übersichtlichkeit, werden Variablen am Anfang deklariert. Initialisieren kann man sie wann man will, aber deklarieren sollte man am Anfang, weil schönes programmieren, Übersichtlichkeit, Paradigmen etc.
Quote:
Originally Posted by Mostey
Was ist ein S.o.p. und warum sollte der die Variable nicht danach erstellen?
S.o.p = System.out.print(ln).
Ich sage nicht, dass sie nicht danach erstellt werden soll, mein Kommentar bezieht sich generell auf sein Bsp. jetzt. Klar, dass man irgendwann nach einer Operation eine Variable erstellen will, aber wie gesagt, besser am Anfang deklarieren und erst später bei der Verwendung initialisieren usw.
Was wär daran unübersichtlich? Gerade wegen der Übersichtlichkeit, werden Variablen am Anfang deklariert. Initialisieren kann man sie wann man will, aber deklarieren sollte man am Anfang, weil schönes programmieren, Übersichtlichkeit, Paradigmen etc.
Und wenn ich den Datentyp der Variable wissen will? Und nein, gewisse Kürzel in einen Variablennamen aufnehmen ist auch nicht sauber.
Die Position der Deklarierung ist überhaupt kein Faktor von sauberer und schöner Programmierung. (Scopes mal ausgenommen)
Quote:
Originally Posted by XxharCs
S.o.p = System.out.print(ln).
Ich sage nicht, dass sie nicht danach erstellt werden soll, mein Kommentar bezieht sich generell auf sein Bsp. jetzt. Klar, dass man irgendwann nach einer Operation eine Variable erstellen will, aber wie gesagt, besser am Anfang deklarieren und erst später bei der Verwendung initialisieren usw.
Wieso? In diesem Beispiel ist der Code vielleicht übersichtlich weil er einfach aus wenigen Zeilen besteht, hast du aber mal mehr Code in einer Funktion und kompliziertere Vorgänge, schneidest du dir damit ins eigene Fleisch.
Du kannst mir das glauben, ich hab' auch mal ne Zeit lang so gedacht.
schreiben als in Java, vor allem, weil der gesammte Code in C++ kürzer und einfacher ist. Oder kann man das auch kürzer zusammenfassen in Java?
Code:
public class Test {
public static void main(String[] args) {
java.util.function.Function<String, String> f = (t) -> {
System.out.println(t);
return new java.util.Scanner(System.in).next();
};
double a = Double.parseDouble(f.apply("Zahl 1:"));
double b = Double.parseDouble(f.apply("Zahl 2:"));
double[] r = {a * b, a + b, 0, a - b, 0, a / b};
System.out.println("Ergebnis: " + r[f.apply("+,-,*,/").charAt(0) - '*']);
}
}
Um auch mal meinen Senf zum Deklarieren der Variablen zu geben: So lokal wie möglich; so global, wie nötig. Oder deklariert ihr eure Zählvariablen für Schleifen auch schon zu Beginn der Funktion?
Ausserdem wurde eben genau dieses Feature nicht umsonst mit dem C99 Standard eingeführt.
Stellt euch mal vor, ihr habt ne ellenlange Funktion und zu Beginn direkt mal 12 Variablen, davon 8 mit irgendwelchen Dummywerten initialisiert, deklariert - nicht gerade schön.
Abgesehen davon kann es Fehler vermeiden und dem Compiler das Optimieren erleichtern.
In Lua muss man alle nicht lokalen variablen "nil-en", damit der Garbage Collector greifen kann. Wenn man das nicht macht, hatte man ein memory-leak.
In C wäre es wahrscheinlich ähnlich, dass man globale variablen wieder aus dem Speicher rauslöschen müsste oder so. Jedenfalls hab ich das auch so verstanden, dass man so viele lokale und so wenige globale wie möglich benutzen sollte.
Frag mal deinen Compiler, wo er denn den Speicher für die Variablen reserviert.
Es geht um die Position der Deklaration (bzw. Definition) im Code und nicht um den rohen Speicher. Wo die dort liegen kann jedem ja irgendwo egal sein. ;O
Java Error Code 11/03/2013 - Minecraft - 2 Replies Morgen,
Ich bekommen wenn ich auf meinem neuem V-Server ( Windows ) die run.bat
starte immer ein Error Code von Java
http://www7.pic-upload.de/03.11.13/ubj6eh3lr5ob.j pg
Das ganze sieht dan so aus.
In der run.bat steht folgendes:
@echo off
Java Taschenrechner 02/05/2013 - General Coding - 5 Replies Hallo,
Momentan programmiere ich in Netbeans an einem Taschenrechner(mit Buttons).
Mit den Grundfunktionen bin ich soweit fertig, nun würde ich noch gerne Knopf einfügen, durch den man das Vorzeichen der eingegeben Zahl ändern kann.
Deshalb wollte ich die Zahl mit (-1) multiplizieren: (input1 ist der Name der Variable)
private void minusActionPerformed(java.awt.event.ActionEvent evt) {
input1=input1*(-1);
...
[S]HTML/Java Code 01/02/2013 - Coders Trading - 10 Replies Hallo ich suche ein HTML code oder Java wo man zbs elitepvpers.com rein schreiben kann und es dann in der liste angezeigt wird weiß jemand wie man das macht oder wo man das her bekommt ? ich gebe e*Gold dafür wenn es wirklich klappt am besten mit hilfe.
[JAVA] Zurückspringen im Code 12/25/2012 - General Coding - 7 Replies Hallo!
Und zwar habe ich folgende Frage...
Ich möchte ein Programm (in Java) programmieren, dass Daten einer Person erfassen kann, sie in einer Textdatei abspeichern/auslesen kann usw..
Wenn ich also im Menü bin..
Person aufnehmen<1>
Personen auflisten<2>
[JAVA] Taschenrechner rechnet nicht! 05/11/2010 - General Coding - 1 Replies Heho,
ich sitz wiedermal in Informatik und komm nicht wirklich weiter.
Wir arbeiten an einem Taschenrechner, Buttons usw sind auch
alle schon vorhanden, jedoch weiß ich nicht wie ich den Wert
aus dem Label übernehmen kann und wie ich die Rechen-Operatoren
einfügen kann.
Wenn mir jemand wenigstens bei einem Rechen-Operatoren helfen könnte
wär ich sehr dankbar^^