Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Java (Anfänger)



Mareike88
07-11-2007, 18:55
Hi,
ich hab hier so eine typische Aufgabe und soll ein Konto erstellen.
Dadrin muss ich zwei Methoden definieren einmal zahleEin und hebeAb, aber irgendwo ist bei mir ein Fehler

public class Konto
{
private int _saldo;
private int _kontostand;
private int _geld;
private int _neusaldo;

public Konto()
{
_saldo = kontostand;
_zahleEin = _saldo;
}

public int zahleEin
{
if _saldo + _geld; (hier soll der Fehler auftretten und zwar soll das Symikolon fehlen)
return _neusaldo
}

public int hebeAb
{
if _saldo - _geld;
return _neusaldo
}
}


Mag mir jemand erklären was ich falsch gemacht habe?

Grüße,
Mareike

bischi
07-11-2007, 18:59
Und du bist dir sicher, dass das Java ist?!

Für mich sähe das etwa so aus:



public class Konto
{
private int _saldo;

public Konto(int kontostand)
{
_saldo = kontostand;
return;
}

public int zahleEin(geld)
{
_saldo = _saldo+geld;
return _saldo;
}

public int hebeAb(geld)
{
if(_saldo - geld <0)
{
System.out.println("Sie dürfen keine Schulden machen - Buchung storniert!");
else
{
_saldo= _saldo - geld;
}
return _saldo
}
}


MfG Bischi

PS: Vielleicht solltest du dir die Links hier mal anschauen: http://homepage.sunrise.ch/mysunrise/dominikbischoff/tutorials_java.html

Mareike88
07-11-2007, 19:20
Hi,
erstmal danke.
Es sollte eigentlich Java darstellen.

public int zahleEin(geld) fehlt der identificer, wo muss ich den reinschreiben?
Muss ich nicht noch Geld irgendwo definieren?

jan61
07-11-2007, 20:53
public int zahleEin(geld) fehlt der identificer, wo muss ich den reinschreiben?
Muss ich nicht noch Geld irgendwo definieren?

Jau, es muss public int zahleEin(int geld) und public int hebeAb(int geld) heißen.

Jan

P.S.: IMHO ist es in Java eigentlich nicht üblich, private Variablen mit einem Unterstrich zu beginnen.

bischi
07-11-2007, 21:19
Oh sorry - da ist natürlich das int zwei mal verloren gegangen ;) Und ob da ein Unterstrich kommt, oder nicht ist schlussendlich auch egal :p

MfG Bischi

PS: @ mareike: Ich würde dir wirklich dringendst empfehlen, mal ein Java-Buch aufzuschlagen. www.javabuch.de finde ich persönlich ganz ok (gratis legaler Download). Oder sonst halt eines der anderen auf meiner Linkpage...

jan61
07-11-2007, 21:28
... Und ob da ein Unterstrich kommt, oder nicht ist schlussendlich auch egal :p...

Ja, für die Funktion ist es würstchen. Aber es gibt eben einige Empfehlungen von Sun und allgemein praktizierte Stile für die Programmierung - da wollte ich nur drauf hinweisen.

Jan

Mareike88
07-11-2007, 21:35
Hi bishi ich hab mir das runtergeladen ich hab hier auch ein Buch von der Uni rumliegen.
Wenn ich die Quelltexte sehe kann ich meistens auch alles zuordnen, aber sobald ich was selber machen soll, weiss ich nicht wo ich anfangen soll, bzw. wo ich was hinschreiben muss.

Genauso soll ich den "Startwert" des Kontos automatisch auf 10 stehen , wobei ich dann
private int _saldo+10; geschrieben habe, er sagt zwar nicht das es falsch ist aber geht tut es trotzdem nicht.
Und da ich momentan alleine zu Hause sitze und niemand hab mit dem ich andere Möglichkeiten diskutieren kann, muss halt das Internet herhalten.

jan61
07-11-2007, 21:50
Genauso soll ich den "Startwert" des Kontos automatisch auf 10 stehen , wobei ich dann
private int _saldo+10; geschrieben habe, er sagt zwar nicht das es falsch ist aber geht tut es trotzdem nicht.


Nein, eine Zuweisung eines Werts erfolgt wie fast überall mit "=": private int _saldo = 10;

2. Variante: Du rufst den Konstruktor der Klasse (nach dem Code von bischi) mit dem Argument 10 auf:
Konto konto = new Konto(10);

3. Variante: Du implementierst einen neuen Konstruktor:

public Konto()
{
_saldo = 10;
return;
}Dann hast Du mit:
Konto konto = new Konto();
automatisch 10 Mäuse im Konto.

Jan

Mareike88
07-11-2007, 22:19
Hi,
vielen Dank für deine ausführliche Erklärung.

Grüße,
Mareike

anda_skoa
08-11-2007, 14:20
Und bei hebeAb in Bischis Code würde ich die Subtraktion in der If Bedingung klammern, auch wenn das implizit durch die Operatorprezedenz gemacht wird.

D.h.


if((_saldo - geld) <0)


Ciao,
_

jan61
08-11-2007, 21:31
Und bei hebeAb in Bischis Code würde ich die Subtraktion in der If Bedingung klammern, auch wenn das implizit durch die Operatorprezedenz gemacht wird.

Naja, auch da kann man geteilter Meinung sein. Ist es nicht LISP, wo so viele Entwickler abhanden kommen, weil sie sich in einem Irrgarten von Klammern verirrt haben und erst nach Jahren wieder rausfinden? :cool:

Ich persönlich setze Klammern gern möglichst sparsam ein, ich finde klammerarmen Code übersichtlicher (wozu sind Operator-Prios sonst da?). Wie gesagt - persönliche Meinung.

Jan

BlueJay
09-11-2007, 10:24
(wozu sind Operator-Prios sonst da?)

Damit man bei jeder neuen Programmiersprache, z.Tl. auch Version, immer wieder böse Überraschungen erleben darf, wenn's sich nicht um mathematische handelt.

so long,
Bluejay

Mareike88
17-11-2007, 17:24
Hab schon wieder ein Problem und zar hatte ich unten am anfang überall int stehen dann hat er mir gesagt das es mit int nicht geht sondern nur mit boolean, also hab ich mir gedacht na gut setz ich halt boolean rein dann hat er mir gesagt das, das weder mit boolean noch mit int geht, dann hab ich float ausprobiert und dann sagt er mir das ich boolean nehmen soll??

public class Tamagotchi
{
private boolean _hunger;
private int _durst;
private int _muedesein;


public Tamagotchi(boolean hungrig, int durstig, int muede)
{
_hunger = hungrig;
_durst = durstig;
_muedesein = muede;
}

public void fuettern()
{
boolean _hunger = _hunger + 1;
if (_hunger = -10)
return "fast verhungert";
else if (_hunger = 10)
return "überfressen";
else
return _hunger;
}

.
.
.

BlueJay
17-11-2007, 19:28
public void fuettern()
{
boolean _hunger = _hunger + 1;
if (_hunger = -10)
return "fast verhungert";
else if (_hunger = 10)
return "überfressen";
else
return _hunger;
}
.

Dieser Teil ist wohl schuld, dass du das Ganze verschlimmbessert hast.
Das,was du in der 1. Zeile hast, kann man nur mit Integern machen
Das, was in der 2.Zeile steht, funktioniert mit Javascript (Achtung! das hast du bestimmt nicht gewollt!), ansonsten setzt man bei Vergleichen meist 2 Gleichheitszeichen.

Und in einer void-Methode etwas zu returnen hassen die meisten Compiler wie die Pest.

Dann returnst du obendrein eine Variable, von der man nicht weiss, ob sie als boolean oder Integer fungieren soll, der andere Ausgang ist ein String.

Das kannste mit Javascript machen, aber nicht mit Java!

so long,
Bluejay

Mareike88
17-11-2007, 19:47
Hi,
danke für deine Antwort.
Stimmt das hab ich wirklich nicht gewollt.

Aber mal eine Verständnissfrage: wie würdet ihr diese Aufgabe verstehen?
Schreibt eine Klasse Tamagotchi, deren Exemplare sich wie sehr einfache Tamagotchis verhalten
sollen. Jedes Tamagotchi kann hungrig, durstig und müde sein. Der Hunger-Zustand soll
als Wert zwischen -10 (fast verhungert) und 10 (überfressen) implementiert werden. Der Durst-
Zustand kann ein Wert zwischen 0 (kein Durst) und 10 (fast verdurstet) sein. Bei der Müdigkeit
gibt es nur die Wahl zwischen müde und nicht müde. Bei der Erzeugung eines Tamagotchis
sollen Anfangswerte angegeben werden können (ihr könnt dabei davon ausgehen, dass nur
gültige Werte angegeben werden). Es soll Methoden zum Füttern (ein Aufruf erhöht den Hunger-
Zustand um 1), zum Stillen (Effekt ist euch freigestellt) und zum Einlullen (anschließend ist
das Tamagotchi erfrischt, also nicht mehr müde) geben. Außerdem soll es eine Methode zum Kitzeln geben (Hungerwert wird um 1 kleiner, Durstwert um 1 größer). Unsere Tamagotchis sollen
nicht selbständig (also unabhängig von Methodenaufrufen) ihren Zustand verändern.


Würde es dann nicht auch reichen wenn ich:
public void fuettern()
{
_hunger = _hunger + 1;
fastverhungert = _hunger == -10;
ueberfressen = _hunger == 10;
}

schreiben würde, steht ja nicht da, dass er es wieder ausgeben soll.

BlueJay
17-11-2007, 21:00
Hi,
zum Stillen (Effekt ist euch freigestellt) und zum Einlullen.
Öhm, im Ernst? :D

Aber da ist ja schon in der Aufgabe definiert, was für Variablentypen verwendet werden sollen: Integers zwischen -10 ud 10, boolsche Variable für nur 2 Zustände, was man zur Not auch mit 0 und (-)1 hinbekommen kann.

Und die Konstruktoren sollen Parameter empfangen können.

Bevor man so eine Aufgabe aufgebrummt bekommt, hatte man doch bestimmt ein paar Unterrichtsstunden. Sind die denn immer noch so katastrophal wie zu seligen Zeiten des Turbo-Pascals?


Würde es dann nicht auch reichen wenn ich:
public void fuettern()
{
_hunger = _hunger + 1;
fastverhungert = _hunger == -10;
ueberfressen = _hunger == 10;
}

schreiben würde, steht ja nicht da, dass er es wieder ausgeben soll.

Mach mal Klammern um die boolsche Abfragen.

Vielleicht fühlt sich das Tamagotchi wohler, wenn es sich mitteilen kann:
if (ueberfressen) System.out.println("Ruelps!");
if (fastverhungert) System.out.println("FEED ME!");
:)

so long,
BlueJay

Mareike88
17-11-2007, 23:22
mhh... wenn ich Klammern setze kommt illegal start of expression.
Und wenn ich sie nicht setze meint er es steht noch boolean da, obwohl er es nicht tut.

Mhh...ich studier Mathe und habe Informatik als Andwendungsfach, kann aber momentan keinerlei zusammenhang sehen zwischen Vorlesung und Übung sehen.
Ich hatte mich zwar während meiner Schulzeit ein bisschen mit JavaScript beschäftigt, weil ich das damals für 'ne Homepage gebraucht habe, aber ansonsten hatte ich vorher null Erfahrung.
Und das was mir noch an Zeit bleibt um "nebenbei" noch ein Buch für Java zu lesen ist nicht viel. Ich hab hier zwar eines aber ich komm einfach nicht hinterher, weil meine meiste Zeit für Mathe drauf geht. Und wenn man noch nie programmiert hat ist es halt schwer.

Grüße,
Mareike

anda_skoa
18-11-2007, 12:11
_hunger = 10

ist ein Ausdruck (Expression), der zwar eine Zuweisung ist, d.h. der Variable _hunger wird der Wert 10 zugewiesen, aber diese Zuweisung hat selbst auch ein Resultat, nämlich den zugweisenen Wert, also Typ "int"

D.h. das


if (_hunger = 10)

praktisch sowas bedeutet


if (10)


In Java wir bei einer Bedingung (Condition), d.h. in if(), while(), for() ein boolscher Ausdruck erwartet, also Typ boolean.
In diesem Fall ist der Ausdruck auf Grund eines fehlenden Zeichens falsch, nicht die Klammerung, d.h.


if (_hunger == 10)

Bedingung wahr wenn _hunger gleich 10. Keine Zuweisung, _hunger bleibt unverändert.

Zur Aufgabenstellung:
ich denke du brauchst die beiden Zustände (fast verhungert, überfressen) nicht extra in Variablen speichern, sondern eventuell nur, wie von BlueJay vorgeschlagen, ausgeben, sobald sie erreicht sind.

Ciao,
_