Java Return beispiel aufgabe

Tommi-lee

Lieutenant
Registriert
Aug. 2007
Beiträge
590
hey leute wie habe ich das mit dem return in den methods zu verstehen. verstehe nicht ganz was in was geladen wird. mir wäre eine einfach erklärung sehr hilfreich.

weitere fragen kommen ;P


double ntime, otime, payrate, tpay;
String input;
input = JOptionPane.showInputDialog(null, "Normal time worked this week:", "Normal time", JOptionPane.QUESTION_MESSAGE);

ntime = Double.parseDouble(input);
input = JOptionPane.showInputDialog(null, "Over time worked this week:", "Over time", JOptionPane.QUESTION_MESSAGE);

otime = Double.parseDouble(input);
input = JOptionPane.showInputDialog(null, "Hourly pay rate:", "Pay rate", JOptionPane.QUESTION_MESSAGE);

payrate = Double.parseDouble(input);

tpay = normalpay(ntime, payrate);
tpay += overpay(otime, payrate);

JOptionPane.showMessageDialog(null, "the weekly Salary is: " + tpay + " Dollar", "Payment", JOptionPane.INFORMATION_MESSAGE);
}
public static double normalpay(double hour, double pay)
{
return (hour * pay);
}

public static double overpay(double hour, double pay)
{
return (hour * (pay * 1.5));
}
}
 
anstatt die ergebnisse in einer zwischenvariable zu speichern werden sie gleich zurückgegeben.
 
das heißt was? was heißt dieses zurück geben den konkret in dem beispiel.

z.b public static double normalpay(double hour, double pay)
{
return (hour * pay);

was wird jetzt genau ausgeführt. nur hour*pay ? wie könnte ich es den anders darstellen. ich kenn noch public static void normalpay(). geht das auch so? und wie würde das aussehen?
 
Zuletzt bearbeitet:
Deine Methode "normalpay(double hour, double pay)" bekommt zwei Double Zahlen und gibt mit "return (hour * pay);" deren Produkt zurück. Bei der anderen Läuft es analog, allerdings sind die Klammern nicht nötig.

"Double.parseDouble(input);" sollte nur mit Abfangen benutzt werden...
 
Zuletzt bearbeitet:
Naja, z.B. die Berechnung von overpay wird nicht nicht nochmal abgespeichert. Sie wird einfach nur ausgegeben.

Du könntest sie in eine neue Variable speichern und damit dann weiter rechnen bzw. später im Programm wieder nutzen.
 
wenn du schreibst

double x = normalpay(12,10);

dann steht in x das produkt, also 120, weil normalpay() dies zurückgibt.
 
muss ich immer return eingeben? ist es ansich den notwendig?

weitere frage:warum rechnet eclipse tpay = normalpay(ntime, payrate);
tpay += overpay(otime, payrate); zusammen.

macht er das weil beide methods tpay genannt werden?
 
In der Zeile

payrate = Double.parseDouble(input);

wird die Methode parseDouble() mit dem Wert "input" aufgerufen. Der Rückgabewert der Methode wird der Variablen "payrate" zugewiesen (so der Methodenaufruf denn erfolgreich war).

Soll eine Methode keinen Rückgabewert liefern, verwendet man "void" in der Methodendeklaration.

Code:
public void test(int a, int b) {...}

Im Methodenrumpf ist dann nicht zwingend ein "return" Statement erforderlich. Es wird in dem Fall überlicherweise weggelassen.
 
Tommi-lee schrieb:
weitere frage:warum rechnet eclipse tpay = normalpay(ntime, payrate);
tpay += overpay(otime, payrate); zusammen.

tpay += overpay(otime, payrate) ist das selbe wie "tpay = tpay + overpay(x,x)"


Und return musst du immer angeben wenn du deiner Methode einen Datentyp wie int oder Double zuweist. Verzichten kannst du darauf wenn du eine Methode ohne Rückgabewert erstellst. Dazu benutzt du dann void ansatt des Dateityps.
 
Die Methode kann sein {private, public, protected}, bei dir ist die public
Dann kommt der Rückgabewert {void, int, double, string, etc...} bei dir ist es double
Und dann der Methodenname (entsprechen einigen Konventionen... jetzt nicht relevant)

Wenn du einen Rückgabewert wählst außer "void" muss im Methodenrumpf (also in der Methode selber) jener "kompatible" Wert auch zurückgegeben werden, also als Beispiel:

public int methodenname{ ...
return 2.0} //Fehler, weil 2.0 unkompatibel zu "int" (verdammt, wie hieß der Fachausdruck nochmal? ^^)

public int methodenname{ ...
return 2} //ist ok

public double methodenname{ ...
return 2} //ist ok, da int kompatibel zu double

public void methodenname{ ...
return 3} //Fehler, weil void keine Rückgabewert akzeptiert oder fordert

hoffe ich konnte helfen :)
 
dasd war die erklärung die ich gesucht hatte. VIELEN DANK!
Ergänzung ()

zwischenfrage: also wenn ich dann immer mit void die methode nenne spar ich mir das return. was kann ich den da den alles reinschreiben in die methode??
 
"schlechtes Beispiel, sorry, werde mal selber schreiben und testen..."

ok, warte muss das mal selber testen was ich da schreibe ^^

@Darlis, hast schon recht, ist schon bissl her, dass ich programmiert habe, muss das wieder auffrischen :)
 
Zuletzt bearbeitet:
Ich versteh' die Frage nicht. Du kannst da reinschreiben was du willst, bzw. alles was von der Syntax her erlaubt ist.
Normalerweise erfüllt eine Methode irgendeinen Zweck, den du in Programmlogik umsetzen musst.

@misa555: Sorry, aber der Code ist unübersichtlich, unvollständig und enthält Syntaxfehler. Und die vielen x' verwirren nur. Das ist ein schlechtes Beispiel für einen Anfänger.
 
Zuletzt bearbeitet: (Ergänzung)
ich versuche das gedanklich von meinem genanntem beispiel zu verstehen.

also wird in der main nur das durch geführt, was ich den der class mit z.b (hour*pay) durchgeführt. und kann ich jegliche werte eingeben und der setzt die deren stelle von hour und pay. so?^^

ich bin gerade sowas von verwirrt xD
 
Deine Fragen sind recht allgemein und teilweise grammatikalisch falsch, da weiß ich nicht wie ich darauf antworten sollte.

Jeder Code, den du in die main-Methode (oder irgendeine andere Methode) schreibst, wird ausgeführt (es sein natürlich, es handelt sich um einen Kommentar). Interessant wird es erst bei Verzweigungen (if-else).

Und ja, du kannst der Methode jeden Wert übergeben den du willst, vorausgesetzt es handelt sich um einen gültigen double-Wert. Also normalpay("Hallo", "Welt") geht nicht. Bei normalpay(2, 5) würde dann diese Rechnung ausgeführt: return (2 * 5); Der Aufruf der Methode liefert dir also die Zahl 10 zurück.
 
Tommi-lee schrieb:
also wird in der main nur das durch geführt, was ich den der class mit z.b (hour*pay) durchgeführt. und kann ich jegliche werte eingeben und der setzt die deren stelle von hour und pay. so?^^

Den Satz verstehe ich nicht ;)

Im Ausgangsbeispiel ist auch keine main() Methode aufgeführt.

Um es ganz allgemein zu formulieren: Man kann einer Methode, so sie denn entsprechende Parameter definiert, entsprechende Werte übergeben.

Code:
public static double overpay(double hour, double pay)
{
    return (hour * (pay * 1.5));
}

Hier wären die Parameter "hour" und "pay", jeweils vom Typ "double". Die Methode führt untenstehende Berechnung durch und gibt den sich ergebenden Wert zurück.

Konkret könnte man die Methode z.B. so aufrufen:

Code:
overpay(2.0, 3.5);

Oft sind die Werte in Variablen gespeichert, dann ruft man die Methode mit diesen Variablen auf:


Code:
double hour = 1.0;
double pay = 50.0;

double result = overpay(hour, pay);

System.out.println(result);

Und klar, die Variabeln können jeden beliebigen, gültigen Wert haben. Wenn der Wertebereich eingeschränkt ist, z.B. nur positive Werte annehmen darf, überprüft man dies normalerweise in der Methode und gibt ggf. eine aussagekräftige Fehlermeldung zurück.
 
ok jetzt habe ich es verstanden. danke. Ich bin ja eine zumutung bei der grammatik:-D. ich entschuldige mich vielmals.


weitere fragen werden in den nächsten tagen folgen.
 
Wenn das Programm startet, wird NUR die main() von oben nach unten durchlaufen.
Das ist die Zentrale.

Und returns liefern einfach etwas zurück. Wenn du eine Methode von einer Stelle aufrufst, diese Methode per return etwas zurück gibt, dann steht das was zurückgegeben wurde an der Stelle des Aufrufes. Merk dir einfach das Code immer nur von oben nach unten durchläuft und je nach Anweisung irgendwo hin springt, dann wieder zurück etc. Methodenaufrufe sind also wie Zwischenrechnungen in Mathe, man berechnet etwas und trägt das Ergebnis dann dort ein wo man es haben wollte.

Was das return genau zurück gibt, steht ganz am anfang vor der methode.
Z.b das int vor test() fordert das return eine Zahl zurück gibt.

int test(){
return 5;
}

mit "static", also:

static int test(){
return 5;
}

...sollte man gar nicht anfangen zu lernen, denn dies ist nicht objekt orientiert und sollte vermieden werden wo es nur geht.

packe methoden in neue klassen (eine datei pro klasse).
darin steht dann

public class hallo{
int test(){
return 5;
}
}

dann kannst du in der main machen:
hallo eineVariable = new hallo();

mit:
int returnTest = hallo.test();
kannst du dann darauf zugreifen.
oder mit: System.out.println(hallo.test()); // das was return liefert wird dann ausgegeben


der vorteil von objektorientierung ist, dass sich so nix in die quere kommt wenn du per "new..." zig kopien erstellst. jede kopie hat ihre eigenen variablen etc. was es damit auf sich hat, wirst du später zu schätzen lernen.

public , private usw. vor methoden / klassen regelt nur die sichtbarkeit innerhalb der klasse, bzw. zwischen den klassen und programmen. damit kann man dann später mit mehr erfahrung regulieren welche klasse welche variablen etc. sieht. wer maximale sicherheit will (standard), der programmiert so, das man nur das nötigste nach außen zeigt. geht später dann mit getter und setter (kapselung) weiter, aber das wäre zu viel für den anfang :D
 
Zuletzt bearbeitet:

Ähnliche Themen

Antworten
12
Aufrufe
1.735
R
Antworten
20
Aufrufe
2.134
Antworten
11
Aufrufe
1.748
Antworten
7
Aufrufe
1.398
Green Mamba
G
Zurück
Oben