|
You last visited: Today at 22:45
Advertisement
Java Taschenrechner // Code nicht Anfängerfreundlich =0
Discussion on Java Taschenrechner // Code nicht Anfängerfreundlich =0 within the Java forum part of the Coders Den category.
05/08/2014, 10:06
|
#1
|
elite*gold: 70
Join Date: Apr 2011
Posts: 423
Received Thanks: 49
|
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?
Java Taschenrechner Code:
Code:
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;
}
}
}
|
|
|
05/08/2014, 11:07
|
#2
|
elite*gold: 34
Join Date: Apr 2011
Posts: 1,475
Received Thanks: 1,228
|
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. =>
Code:
#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;
}
|
|
|
05/08/2014, 12:36
|
#3
|
elite*gold: 1091
Join Date: Jun 2007
Posts: 19,836
Received Thanks: 7,180
|
Quote:
Originally Posted by XxharCs
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?
|
|
|
05/08/2014, 12:55
|
#4
|
elite*gold: 34
Join Date: Apr 2011
Posts: 1,475
Received Thanks: 1,228
|
Quote:
Originally Posted by Mostey
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.
|
|
|
05/08/2014, 13:14
|
#5
|
elite*gold: 1091
Join Date: Jun 2007
Posts: 19,836
Received Thanks: 7,180
|
Quote:
Originally Posted by XxharCs
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.
|
|
|
05/08/2014, 14:01
|
#6
|
elite*gold: 0
Join Date: Jan 2012
Posts: 759
Received Thanks: 416
|
Quote:
Originally Posted by Crystal M0th
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) - '*']);
}
}
Etwas kürzer.
|
|
|
05/30/2014, 13:30
|
#7
|
elite*gold: 0
Join Date: Oct 2011
Posts: 12
Received Thanks: 0
|
Quote:
Originally Posted by Mostey
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)
|
Also wir bauen unsere Programme in der Schule nach den UML Diagrammen auf. Und das ist auf jedenfalls hilfreich!
|
|
|
05/30/2014, 14:54
|
#8
|
elite*gold: 0
Join Date: Feb 2013
Posts: 1,137
Received Thanks: 869
|
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.
http://de.wikipedia.org/wiki/YAGNI
|
|
|
05/30/2014, 15:30
|
#9
|
elite*gold: 1091
Join Date: Jun 2007
Posts: 19,836
Received Thanks: 7,180
|
Quote:
Originally Posted by SHEEERO
Also wir bauen unsere Programme in der Schule nach den UML Diagrammen auf. Und das ist auf jedenfalls hilfreich!
|
Da werden aber keine lokalen Variablen mit aufgenommen.
|
|
|
05/30/2014, 15:53
|
#10
|
elite*gold: 724
Join Date: Mar 2011
Posts: 10,479
Received Thanks: 3,318
|
Quote:
Originally Posted by Mostey
Seit wann deklariert man Variablen am Anfang? Das wird total unübersichtlich je länger die Funktion wird.
|
Frag mal deinen Compiler, wo er denn den Speicher für die Variablen reserviert.
|
|
|
05/30/2014, 17:10
|
#11
|
elite*gold: 1
Join Date: Aug 2013
Posts: 1,898
Received Thanks: 1,346
|
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.
|
|
|
05/30/2014, 18:24
|
#12
|
elite*gold: 1091
Join Date: Jun 2007
Posts: 19,836
Received Thanks: 7,180
|
Quote:
Originally Posted by snow911
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
|
|
|
 |
Similar Threads
|
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^^
|
All times are GMT +1. The time now is 22:47.
|
|