2017-05-27 4 views
0

Ich habe eine Methode, die die Anzahl der Zeiten zählt, die ein Benutzer von der ATM zurückgezogen hat (wie es ein Limit gibt) und zählt auch die Menge an Geld, die der Benutzer an dem Tag zurückgezogen hat. Die Werte in der Variablen "var" und in der Variablen "amountWithdrawn" gehen jedoch beim Verlassen der Methode verloren. Wie behalte ich sie "gespeichert"?
Auch als eine Randnotiz, habe ich eine Klasse namens Account, die die Balance hat und solche, wäre es am besten, sie dort zu setzen? Möchte aber auch wissen, ob es möglich ist, die Variablen in der Methode zur späteren Referenz zu speichern.Wie kann ein Variablenwert beim Verlassen der Methode gespeichert werden?

public decimal WithDraw() 
{ 
    int timesWithdrawn = 9; 

    decimal amountWithdrawnToday = 0; 
    decimal money = 0; 
    bool success = false; 
    if (timesWithdrawn < 10) 
    { 
     do 
     { 
      //Console.WriteLine("{0} available to withdraw.", FundsAvailable); 
      Console.WriteLine("How much would you like to withdraw?"); 
      try 
      { 
       money = decimal.Parse(Console.ReadLine()); 
       if (money % 5 == 0 && money <= account.CurrentBalance && money <= 1000) 
       { 
        success = true; 
       } 
       if (money == 0) 
       { 
        bool exit = true; 
        Console.WriteLine("Do you want to exit? Type \"yes\", or \"no\"."); 
        while (exit == true) 
        { 
         string response = Console.ReadLine(); 
         if (response.ToLower() == "yes") 
         { 
          break; 
         } 
         else 
         { 
          exit = false; 
         } 
        } 
       } 
      } 
      catch (FormatException) 
      { 
       Console.WriteLine("Please enter a number to withdraw."); 
      } 
     } while (success == false); 
     //do while this is true 
     Console.WriteLine(account.CurrentBalance); 
     Console.WriteLine("Withdrawing {0} pounds.", money); 
     Console.WriteLine("You have {0} remaining in your account.", account.CurrentBalance - money); 
     amountWithdrawnToday += money; 
     timesWithdrawn += 1; 
     Console.WriteLine("{0} pounds withdrawn today", amountWithdrawnToday); 
     return account.CurrentBalance -= money; 
    } 
    else 
    { 
     Console.WriteLine("You have exceeded daily withdrawls. You have withdrawn {0}", amountWithdrawnToday); 
     return amountWithdrawnToday; 
    } 
} 
+0

Es scheint mir, dass es für diese spezielle Verwendung besser wäre, die Kontoklasse zu verwenden, da sie Informationen über das Konto enthält. Außerdem ist es möglich, eine "Wrapper" -Klasse zu erstellen, um von der Methode zurückzukommen, die alle außerhalb der Methode benötigten Informationen enthält. Eine weitere Option ist die Verwendung von out- oder ref-Parametern. Senden von Parametern ändert sie in dem Kontext, aus dem sie gesendet wurden. Sie können mehr darüber lesen Sie hier [Link] (https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/method-parameters) –

Antwort

1

Ich werde vorschlagen, dass Sie jene Variable in der Account Klasse setzen müssen, auch schlage ich vor, dass Sie die withdraw Methode selbst in der Account Klasse setzen könnte, mehr OOP freundlich Dies könnte.

und die timesWithdrawn Nummer zu speichern, müssen Sie es einfach als Klasseninstanz macht es vairable statt lokale Variable

hier ist der Code

class Account 
{ 
    public decimal CurrentBalance { get; set; } 
    public int timesWithdrawn { get; set; } = 9; 

    public decimal WithDraw() 
    { 
     decimal amountWithdrawnToday = 0; 
     decimal money = 0; 
     bool success = false; 
     if (timesWithdrawn < 10) 
     { 
      do 
      { 
       //Console.WriteLine("{0} available to withdraw.", FundsAvailable); 
       Console.WriteLine("How much would you like to withdraw?"); 
       try 
       { 
        money = decimal.Parse(Console.ReadLine()); 
        if (money % 5 == 0 && money <= CurrentBalance && money <= 1000) 
        { 
         success = true; 
        } 
        if (money == 0) 
        { 
         bool exit = true; 
         Console.WriteLine("Do you want to exit? Type \"yes\", or \"no\"."); 
         while (exit == true) 
         { 
          string response = Console.ReadLine(); 
          if (response.ToLower() == "yes") 
          { 
           break; 
          } 
          else 
          { 
           exit = false; 
          } 
         } 
        } 
       } 
       catch (FormatException) 
       { 
        Console.WriteLine("Please enter a number to withdraw."); 
       } 
      } while (success == false); 
      //do while this is true 
      Console.WriteLine(CurrentBalance); 
      Console.WriteLine("Withdrawing {0} pounds.", money); 
      Console.WriteLine("You have {0} remaining in your account.", CurrentBalance - money); 
      amountWithdrawnToday += money; 
      timesWithdrawn += 1; 
      Console.WriteLine("{0} pounds withdrawn today", amountWithdrawnToday); 
      return CurrentBalance -= money; 
     } 
     else 
     { 
      Console.WriteLine("You have exceeded daily withdrawls. You have withdrawn {0}", amountWithdrawnToday); 
      return amountWithdrawnToday; 
     } 
    } 
} 

wie man es von bemerken machen der Code, ich entfernte den Verweis auf die account Variable und machte die CurrentBalance als Instanzvariable und auch die timesWithdrawn.

Dies könnte den Wert der timesWithdrawn beibehalten, auch nachdem die Methode beendet wurde.

0

Solange das Programm läuft es dort gespeichert wird, aber es setzt einmal ganz, also ja haben Sie es irgendwo in einer Datenbank, die eine Excel-Tabelle oder in einem Textdokument Saving data to a file in C#

sparen Überprüfen Sie dies, wenn Sie Hilfe benötigen, wie man Sachen wie diese tun kann

+0

während Sie Recht haben, The op nicht nachfragen Das OP fragt danach, ob man den Wert aus der Methode erhalten soll, nachdem man sie beendet hat –

0

Sie könnten einen 'out' Parameter an die Funktion übergeben, es ist im Grunde eine Variable, die Sie an die Funktion senden, die ihren Wert außerhalb der Funktion hält. Zum Beispiel:

public void WithDraw(out int c) { 
    c = something ; //c must receive a value during the call 
} 

int myvar; // the parameter which will hold the value when the function returns 

WithDraw(out myvar); //call to the function 

myvar //will now hold a value from the function (something) 

Sie auch ein Tupel zurückgeben oder setzen Sie den Wert in eine ‚globale Variable‘ speichern möchten in Erwägung ziehen könnte.

Verwandte Themen