Newbee vermasselt Prüfung, nun Fehlersuche step-by-step

ah, ok jetzt kommt es langsam. Dann würde die Klasse Konto so aussehen:
Code:
  public class Konto {
	// Instanzvariable
	private double kontostand;
	private int kontonr;
 
	// Konstruktor
	public Konto(double stand_neu, int kontonummer) {
	kontostand = stand_neu;
	kontonr = kontonummer;
	}
	
	// Kontostand abfragen
	public double getKontostand() {
 return kontostand;
	}
	
	// Geldbetrag auf das Konto einzahlen
	public void einzahlen(double betrag) {
 kontostand = kontostand + betrag;
	}
	
	// Geldbetrag vom Konto abheben
	public void abheben(double betrag) {
 kontostand = kontostand - betrag;
	}
 
	// Kontonummer auslesen
	public int getKontonummer() {
	return kontonr; 
}
}

und wie bekomme ich sowas hin?
Die Methode abheben() wird so geändert, dass nur noch Abhebungen möglich
sind, die durch Guthaben gedeckt sind. Die Methode soll einen Wahrheitswert
zurückgeben, der angibt, ob die Abhebung durchgeführt wurde. Wird versucht,
einen Betrag abzuheben, der größer als der Kontostand ist, so soll der
Kontostand unverändert bleiben und der Wert false zurückgegeben werden.
Anderenfalls soll die Abhebung ausgeführt und der Wert true zurückgegeben
werden.

Mit einer If Bedinung?
 
Hi,
auch das ist ziemlich simpel. Ich geb diesmal keinen Code vor sondern nur die Theorie ;).
Die Funktion muss statt void true oder false zurückgeben in Form eins boolean Wertes. False wenn das Konto nicht gedeckt ist und true wenn die Abhebung eben erfolgreich war.
Was nun zurückgegeben wird ermittelst du über eine If-Abfrage. Damit prüfst du ob der Kontostand über dem abzuhebenden Wert liegt oder eben nicht.
Versuch das mal in Code umzusetzen und poste nochmal ;).

Gruß
 
Code:
// Geldbetrag vom Konto abheben
	public boolean abheben(double betrag) {
if (kontostand=<0) kontostand = kontostand - betrag;
	}

so ?
 
Hm.. teilweise :D

Also der Kopf der Methode ist korrekt. Die Abfrage ist nicht wirklich richtig. Der Kontostand muss ja NACH dem Abheben 0 oder höher sein. Momentan testest du ja nur ob er davor 0 oder höher ist.
Ansonsten müsstest du noch ein return true oder false einbauen, je nach Resultat der Abfrage.

gruß
 
Code:
// Geldbetrag vom Konto abheben
	public boolean abheben(double betrag) {
if (kontostand - betrag =<0) {kontostand = kontostand - betrag;return true}return false;
	}
#
und so?
 
Hi!

also so gehts auch nicht :)

du behebst, wenn der kontostand <= 0 ist, also entweder gleich 0 oder kleiner als 0, also negativ ist. Du solltest dir die if Anweisung noch einmal genauer ansehn.

Zweitens: soll gleich in der Abfrage abgehoben werden? Du hast ja schon eine Methode die dir Geld von deinem Konto abhebt, die kannst du hier ganz locker einbaun :)

Gruß
TOM
 
Code:
// Geldbetrag vom Konto abheben
	public boolean abheben(double betrag) {
if (betrag > kontostand) {
return false;}
kontostand = kontostand - betrag;
}
 
Jo, wir sind am richtigen Weg! Sehr gut!

Wenn du das jetzt allerdings in einen Editor, sagen wir Eclipse eingeben würdest, würdest du einen Fehler erhalten ... Warum? Es fehlt noch eine Kleinigkeit am Ende, also nachdem du den Kontostand neu zugewiesen hast. Kleiner Tipp: ret ... ;)

Gruß
TOM
 
Code:
// Geldbetrag vom Konto abheben
	public boolean abheben(double betrag) {
if (betrag > kontostand) {
return false;}
kontostand = kontostand - betrag;
return true;

dann dürfte es so passen, oder?

Und wie gehe ich das letzte an?

Die Klasse KontoTester will ich so abändern, das das erzeugte Konto die Kontonummer
12345678 erhalten soll. Am Ende der Methode main() soll die Kontonummer abgefragt
und ausgegeben werden. Bei jeder einzelnen Abhebung soll getestet werden, ob sie
erfolgreich war. Nur, wenn eine Abhebung ausgeführt werden konnte, soll der neue
Kontostand ausgegeben werden, anderenfalls soll jeweils die Meldung „Guthaben
nicht ausreichend.“ ausgegeben werden.

Hier nochmal die Klasse KontoTester
Code:
public class KontoTester {
	public static void main(String[] args) {
Konto einKonto;
 
// Konto anlegen
einKonto = new Konto(500.00);
System.out.println("Erster Kontostand: " + einKonto.getKontostand());
 
// Vom Konto abheben
einKonto.abheben(150.00);
System.out.println("Kontostand nach abheben von 150.00: "
	 + einKonto.getKontostand());
 
// Auf Konto einzahlen
einKonto.einzahlen(11.23);
System.out.println("Kontostand nach einzahlen von 11.23: "
	 + einKonto.getKontostand());
 
// Vom Konto abheben
einKonto.abheben(400.00);
System.out.println("Kontostand nach abheben von 400.00: "
	 + einKonto.getKontostand());
 
// Auf Konto einzahlen
einKonto.einzahlen(222.50);
System.out.println("Kontostand nach einzahlen von 222.50: "
	 + einKonto.getKontostand());
 
// Vom Konto abheben
einKonto.abheben(47.62);
System.out.println("Kontostand nach abheben von 47.62: "
	 + einKonto.getKontostand());
	}
}
 
Jep, ich würde sagen die Methode abheben(..) stimmt so.

Hm... bei deiner Main wirst du ein Problem bekommen, und zwar gleich beim Anlegen deines neuen Kontos. Schau dir doch nochmal den Constructor an, den du in den vorherigen Posts beschrieben hast, da fehlt dir bei
Code:
... = new Konto(500.00, ...)
noch die Kontonummer (beschrieben durch "...").

Die Ausgabe kannst du entweder nach jedem Aufruf der Methode abheben abfragen, da ja von abheben ein boolean Wert zurückgegeben wird, oder gleich direkt in der Methode die Ausgabe managen. Das überlass ich mal dir :)

Für die Abfrage der Kontonummer hast du dir bereits einen Getter geschrieben (also eine Methode die dir die Kontonummer liefert). Einfach nur noch einsetzen (auch das überlass ich dir :) )

Das sollts eigentlich gewesen sein. Bin schon gespannt auf deine Lösung!

TOM
 
Zurück