2016-03-22 17 views
1

was ich versuche, ist ein Überziehungslimit festlegen, d. H. -150 der Benutzer kann nicht weiter abziehen, wenn ihr Kontostand -150 ist. Mein Code ist unten:So legen Sie ein Überziehungslimit fest

Methode zurückziehen

public void Withdraw(double amount){ 


    if (amount + 5 > balance){ //If amount and transaction fee is greater than balance then apply for overdraft 
     System.out.println("Insufficent funds"); 
     System.out.println("Would you like to apply for an ovedraft?"); 
     System.out.println("1:Yes"); 
     System.out.println("2:No, return me back to menus"); 
     Choice = Option.nextLine(); 
     if (Choice.equalsIgnoreCase("1")){ 
     if((balance = balance - amount+5)<=-150){ //If balance is grater than 150 , apply for overdraft 
      System.out.println("You have exceeded your Overdraft Limit, you will now be returned back to the menus"); 
     return; 

     } 
     else{ //if not exceeding bank balance 
      balance -= amount + 5; 
      System.out.println("You have withdrawen £" + amount); 
      System.err.println("You now have a balance of £" +balance); 
      return; 
     } 
    } 
} 

} 

Sie sind alle in der gleichen Klasse, die „Konto“ ist, was jetzt passiert, ist, dass die Nachricht auftritt - ("Sie haben überschritten Ihre Überziehungs Limit, Sie werden jetzt zurück zu den Menüs ") und kehrt zurück zu den Menüs, aber wenn ich gehe, um das Guthaben zu überprüfen, wird das Geld noch abgezogen und zeigt ein Guthaben, das über -150 z. B. geht. -190 wie kann ich es machen, dass -150 die Grenze ist und nicht mehr abziehen. Hoffe, die Frage wurde verstanden.

+1

Stack-Überlauf Abschlag interpretiert Ihre Variablen als Klassen führen, dass Sie sie mit einem Großbuchstaben schreiben. Pfui. – Gendarme

Antwort

4

Hier ist das Problem:

if ((balance = balance - amount + 5) <= -150) { 

Die kritische Sache hier ist, dass =. Das setzt die neue Menge vor dem Scheck zu.

So etwas kann das Problem vermeiden.

if (balance - amount - 5 < 0) { 
     System.out.println("Insufficent funds"); 
     System.out.println("Would you like to apply for an ovedraft?"); 
     System.out.println("1:Yes"); 
     System.out.println("2:No, return me back to menus"); 
     Choice = Option.nextLine(); 
     if (Choice.equalsIgnoreCase("1")) { 
      if (balance - amount - 5 <= -150) { 
       System.out.println("You have exceeded your Overdraft Limit, you will now be returned back to the menus"); 
      } else { //if not exceeding bank balance 
       balance -= amount + 5; 
       System.out.println("You have withdrawen £" + amount); 
       System.err.println("You now have a balance of £" + balance); 
      } 

Hinweis der expliziten Berechnungen (if (balance - amount - 5 <= -150)), der Trockenlauf die Mathematik und der Vergleichs unter Verwendung von <= 0. Das ist einfacher zu verstehen.

2

if((balance = balance - amount+5)<=-150) ist Ihr Problem. Zuallererst haben Sie amount+5 nicht in Klammern geschrieben, also sollte es stattdessen amount-5 sein.

Zweitens, Sie ändern tatsächlich Ihr Kontostand hier (= ist der Zuweisungsoperator). Sie haben auch <= anstelle von < geschrieben. Was stattdessen sollen Sie schreiben, ist folgende:

if(balance-(amount+5) < -150)

0

zusätzlich zu allen der Antwort oben ich dies hinzufügen:

wenn ich 1 $ habe und ich mache einen Überziehungs von $ 50 dann kann mein Konto bei

1 $ -55 $ sein = -54 $

aber mit diesem hier Zustand nicht möglich ist

if (amount + FEES > balance) { // If amount and transaction fee is greater than balance then apply for overdraft 
System.out.println("Insufficent funds"); 
Verwandte Themen