Register for your free account! | Forgot your password?


Go Back   elitepvpers > Coders Den > Java
You last visited: Today at 09:10

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Java simpler calculator..?

Discussion on Java simpler calculator..? within the Java forum part of the Coders Den category.

Reply
 
Old   #1

 
elite*gold: 14
Join Date: Oct 2009
Posts: 364
Received Thanks: 194
Java simpler calculator..?

Moin ich habe ne richtig schlechte Aufgabenstellung erhalten und soll diese nun machen.

Quote:
Aufgabe:

Erstelle die Klasse Calculator:

Attribute int a,b (mit getter und setter)
Methode calculate(int type)
für type gibt es den Wert ADD oder SUB

Erstelle eine main-Methode um die Klasse zu testen
So wie ich die Aufgabe verstehe, erhält man 3 Eingaben,
2 Zahlen und die Aktion dazu. Nun soll ich mit den 2 Zahlen
ein Calculator Objekt erstellen welches im Konstruktor zwei
Int erwartet, diese werden via set-Methoden als a und b festgelegt.
Danach soll die Methode calculate() aufgerufen werden mit einer
Kennzeichnung welche Rechnung zutun ist.
Diese holt sich via get-Methoden die beiden Werte a und b und
berechnet diese entsprechend des Parameters und gibt das Ergebnis zurück.


Meine Frage ist, wie sieht die Methode calculate() aus, kann mir jmd erklären wie ich jetzt add und sub kennzeichne?
AR0K is offline  
Old 09/22/2016, 13:05   #2
 
elite*gold: 0
Join Date: May 2015
Posts: 701
Received Thanks: 445
Da type vom Typ int ist, kannst du natürlich nur Zahlen übergeben, zum Beispiel "0" für "ADD" und "1" für "SUB".

Eine erste Version könnte also so aussehen:
Code:
public int calculate(int type) {
    if (type == 0) { 
        return a + b;
    } else if (type == 1) {
        return a - b;
    } else { 
        // Fehlerbehandlung, z.B. IllegalArgumentException werfen 
    }
}
Natürlich kannst du statt if/else auch switch/case nehmen.

So ist der Code aber noch schlecht, denn ein Aufruf meinCalc.calcuate(0); sagt einer zweiten Person (die die Funktion calculate() nicht selber geschrieben hat) überhaupt nichts. Für was soll die "0" stehen?
Solche Zahlen nennt man auch "Magic Numbers". Das sind in diesem Kontext also Zahlen mit einer ganz bestimmten Bedeutung, die aber nicht ersichtlich ist.

Lösung: Konstanten für 0 (ADD) und 1 (SUB) einführen. Zuerst deklarierst du also zwei neue Attribute mit den Modifiers public, final und static:
Code:
public static final int ADD = 0;
public static final int SUB = 1;
Dann ersetzt du die Zahlen 0 und 1 einfach durch die Konstanten also
Code:
public int calculate(int type) {
    if (type == ADD) {
        return a + b;
    } else if (type == SUB) {
        return a - b;
    } else {
        // Fehlerbehandlung
    }
}
und verwendest die Konstanten auch bei jedem Aufruf, also zum Beispiel
Code:
meinCalc.calculate(Calculator.ADD);
algernong is offline  
Old 09/24/2016, 20:59   #3
 
elite*gold: 0
Join Date: Apr 2008
Posts: 8,640
Received Thanks: 5,458
algernog hat bereits eine gute Lösung vorgestellt.

Im letzten Satz der Aufgabe taucht "testen" auf. Nun ist die Frage, sollt ihr JUnit Tests benutzen oder lediglich eine einfache Ausgabe erzeugen?


Wenn ihr JUnit benutzen sollt, dann kannst du beispielsweise auf "assertTrue(boolesche Bedingung)" zurückgreifen um deine Ergebnisse zu validieren. In der main-Methode sollte also am Ende sowas wie hier stehen:
Code:
assertTrue(20 == meinCalc.calculate(ADD));
assertTrue(4 == meinCalc.calculate(SUB);
Ansonsten solltest du zumindest mehr Informationen in der Konsole ausgeben damit überhaupt ersichtlich wird, was du addierst oder subtrahierst.
Code:
System.out.println("12+8 = " + meinCalc.calculate(ADD));
System.out.println("12-8 = " + meinCalc.calculate(SUB));
EDIT: Der Threadkürzel JS steht für JavaScript. Das hat nicht annäherend mit Java zu tun
Garuga is offline  
Old 09/27/2016, 18:29   #4
 
elite*gold: 0
Join Date: May 2015
Posts: 701
Received Thanks: 445
Ich würde statt assertTrue() direkt assertEquals() verwenden, denn dann wird bei einem Fehler automatisch ausgegeben, welcher Wert erwartet und welcher tatsächlich berechnet wurde.
So spart man sich die manuelle Ausgabe.
algernong is offline  
Thanks
1 User
Old 10/01/2016, 09:19   #5
 
elite*gold: 0
Join Date: Jul 2011
Posts: 1,731
Received Thanks: 802
Quote:
Originally Posted by Garuga View Post
algernog hat bereits eine gute Lösung vorgestellt.

Im letzten Satz der Aufgabe taucht "testen" auf. Nun ist die Frage, sollt ihr JUnit Tests benutzen oder lediglich eine einfache Ausgabe erzeugen?


Wenn ihr JUnit benutzen sollt, dann kannst du beispielsweise auf "assertTrue(boolesche Bedingung)" zurückgreifen um deine Ergebnisse zu validieren. In der main-Methode sollte also am Ende sowas wie hier stehen:
Code:
assertTrue(20 == meinCalc.calculate(ADD));
assertTrue(4 == meinCalc.calculate(SUB);
Ansonsten solltest du zumindest mehr Informationen in der Konsole ausgeben damit überhaupt ersichtlich wird, was du addierst oder subtrahierst.
Code:
System.out.println("12+8 = " + meinCalc.calculate(ADD));
System.out.println("12-8 = " + meinCalc.calculate(SUB));
EDIT: Der Threadkürzel JS steht für JavaScript. Das hat nicht annäherend mit Java zu tun
In der Aufgabe wird nirgends nach J-Unit Tests gefragt. Wäre auch bisschen oversized.
"Erstelle eine main-Methode um die Klasse zu testen."

Damit wird das einfache Aufrufen der calculate Methode (mit den Parametern Add/Sub) über die main Methode gemeint sein.
XYZ-Cannon is offline  
Reply


Similar Threads Similar Threads
Java Editor, simpler Additionsrechner fail
09/04/2012 - Off Topic - 1 Replies
hey Leute, ich weis (blame me) ihr wollt leuten nicht unbedingt die haussaufgaben machen, aber ich hab wirklich igwie ein problem ich hatte in meinem leben noch nie informatik(bin jetzt 10.) und unser neuer info lehrer hat uns nach der ersten stunde gesagt wir sollen nen simplen additionsrechner mit java erstellen sprich: 3 numberfields 1 button
[Source Code] number system calculator [Java]
12/18/2011 - Coding Releases - 1 Replies
Hey guys. Today im going to release my number system calculator. I hope it is pretty useful for you :) import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.lang.Object.*; import java.lang.Math.*;



All times are GMT +2. The time now is 09:10.


Powered by vBulletin®
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2021 elitepvpers All Rights Reserved.