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

mhh.... versuch

Code:
public class KontoTester {
	public static void main(String[] args) {
 Konto einKonto;
 
 // Konto anlegen
 einKonto = new Konto(500.00, "12345678");
 System.out.println("Die Kontonummer lautet: "+ einKonto.getKontonummer());
		System.out.println("Erster Kontostand: " + einKonto.getKontostand());
 
 // Vom Konto abheben
 einKonto.abheben(150.00);
 if (abheben = true){
 System.out.println("Kontostand nach abheben von 150.00: "
	  + einKonto.getKontostand());}
 System.out.println("Guthaben nicht ausreichend"´)
 
 // 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());
	}
}
 
Sodala, wir kommen der Sache näher, aber was wäre das Leben ohne Fehler? Langweilig, oder? :-) In diesem Sinne ein paar Anregungen:

// Vom Konto abheben
einKonto.abheben(150.00);
if (abheben = true){
System.out.println("Kontostand nach abheben von 150.00: "
+ einKonto.getKontostand());}
System.out.println("Guthaben nicht ausreichend"´)

Was passiert hier genau? Lass es uns Schritt für Schritt durchgehn.

Mit
Code:
einKonto.abheben(150.00)

rufst du richtigerweise die Methode abheben aus, und überprüfst ob es möglich ist einen Betrag abzuheben. Soweit richtig! Im nächsten Schritt versuchst du eine Abfrage zu gestalten, ob der Wert von einKonto.abheben true oder false zurückliefert. Was du aber hier machst, ist das Aufrufen von einer Methode die es nicht gibt ... du hast keine Klassenmethode, das sind Methoden die in einer Klasse global zu Verfügung stehen (aber egal), die abheben heißt. Du hast lediglich die einKonto.abheben Methode, also kannst du auch die hier nur einsetzen. Da die Methode ja einen booleschen Wert zurückliefert, und if-Anweisungen nur boolesche Ausdrücke, also wahr oder nicht wahr, interpretieren können, solltest du die Methode gleich einbauen, also z.B. so:

Code:
if (einKonto.abheben(150)) { ... }

Was erhält man dabei? Du erhälst dabei die Aussage, "Ja, ich kann geld abheben" oder die Aussage "Nein, des geht nicht". Angenommen du kannst deine 150 abheben, dann liefert die Methode den Wert true, also geht die if-Anweisung in den {} Bereich. Hier kannst du dann auch spezifizieren was geschen soll, wenn dieser Fall eintritt (z.b. eine Ausgabe mit "Erfolgreich beho...." ;) ). Ist der Wert allerdings "false", also nicht erfüllt, dann wird nichts weiter passieren, und der schöne Code den du in den Bereich {} geschrieben hast, tja, der wird nicht ausgeführt. Um nun aber den "false" Fall auch abdecken zu können, gibt es ein ganz gefinkeltes "else". Das mußt du gleich darunter anbringen, z.B. so:

Code:
if ( ... ) {
 .....
}
else {
 ...
}

Hier kannst du wiederum spezifizieren was passieren soll. In deinem Fall sagt das aus, dass keine Behebung möglich war ... also muss die Ausgabe lauten "Leider ...".

So,ich hoffe ich hab dir nicht alles verraten :-)

Also, auf ein Neues :)

TOM
 
Code:
// Konto anlegen
 einKonto = new Konto(500.00, "12345678");
 System.out.println("Die Kontonummer lautet: "+ einKonto.getKontonummer());
		System.out.println("Erster Kontostand: " + einKonto.getKontostand());
 
 // Vom Konto abheben
 einKonto.abheben(150.00);
 if (einKonto.abheben(150)){
 System.out.println("Kontostand nach abheben von 150.00: "
	  + einKonto.getKontostand());}
 else{
 System.out.println("Guthaben nicht ausreichend"´);
 }
also sollte es so aussehen?
 
Jooo! Jetzt haben wirs gleich!!

Das einzige was du jetzt noch bedenken mußt, ist, dass jedesmal, wenn du die Methode meinKonto.abheben(..) aufrufst, egal ob in einer if-Anweisung oder nicht, der Betrag, sagen wir er ist valide, und darf abgehoben werden, auch tatsächlich abgehoben wird! Also in deinem Fall werden statt 150 Geldeinheiten 300 Geldeinheiten abgezogen. Der Rest stimmt!

TOM
 
Bis auf

Code:
if (kontostand - betrag =<0)

sieht es gut aus , muss aber heissen :

Code:
if (kontostand - betrag >=0)

Sonst hebst dur nur ab, wenn du auf jedenfall kein Geld mehr hast oder minus machst ... :-)

Weiter so,

Krösi
 
Ein Tipp noch, solche Aufgaben sind leicht mit einem Debugger nachzuvollziehen, also am besten ausprogrammieren und mit einem Debugger drüberfahren. Dann kannst du auch erkennen wie/was/wo passiert, welche Werte deine Variablen haben etc.

TOM
 
kroesi hat gesagt.:
Bis auf

Code:
if (kontostand - betrag =<0)

sieht es gut aus , muss aber heissen :

Code:
if (kontostand - betrag >=0)

Sonst hebst dur nur ab, wenn du auf jedenfall kein Geld mehr hast oder minus machst ... :-)

Weiter so,

Krösi

HÄ? Wo ist denn das?
 
TommyMo hat gesagt.:
Jooo! Jetzt haben wirs gleich!!

Das einzige was du jetzt noch bedenken mußt, ist, dass jedesmal, wenn du die Methode meinKonto.abheben(..) aufrufst, egal ob in einer if-Anweisung oder nicht, der Betrag, sagen wir er ist valide, und darf abgehoben werden, auch tatsächlich abgehoben wird! Also in deinem Fall werden statt 150 Geldeinheiten 300 Geldeinheiten abgezogen. Der Rest stimmt!

TOM

muss dann das hier
Code:
if (einKonto.abheben(150)

so lauten?
Code:
if (einKonto.abheben()
 
Zurück