2015-10-10 60 views
0

我正在製作一個簡單的ATM,並且遇到了一個問題。無法修改列表

應用:http://pastebin.com/Uk1q5vpC
操縱指令:http://pastebin.com/eG8XWM4w

帳戶:

class Konto 
{ 
    public Bankkort bankkort; 
    private string namn; 
    public string losenord; 
    public int pengar; 
    public Kontoutdrag ku = new Kontoutdrag(); 

    public Konto(Bankkort bk, string n, string l, int p) 
    { 
     bankkort = bk; 
     namn = n; 
     losenord = l; 
     pengar = p; 
    } 

    public override string ToString() 
    { 
     return namn; 
    } 
} 

提款:

class Uttagning : Kommando 
{ 
    public void Hantera(Konto konto) 
    { 
     Console.WriteLine("Du har " + konto.pengar + " kr. Hur mycket vill du ta ut?"); 

     string inmatning = Console.ReadLine(); 
     konto.pengar -= int.Parse(inmatning); 
     konto.ku.log.Add("Uttagning: " + inmatning); 

     Console.WriteLine("Nu har du " + konto.pengar + " kr!"); 
    } 
} 

報表(日誌,顯示何時以及有多少你存入或提取) :

class Kontoutdrag : Kommando 
{ 
    public List<string> log = new List<string>(); 

    public void Hantera(Konto konto) 
    { 
     for (int i = 0; i < log.Count; i++) 
     { 
      Console.WriteLine(log[i]); 
     } 
    } 
} 

我會盡我所能解釋我的問題。我撤回500美元,並希望將其保存到日誌(列表)。如果您在Account課中查看public Kontoutdrag ku = new Kontoutdrag();,則每個帳戶都有一個「聲明」/日誌。我修改Withdraw類中的Hantera方法中的日誌列表konto.ku.log.Add("Uttagning: " + inmatning);。但是當在「Statement」/ Log中調用Hantera方法時,它不會打印出任何東西。

步驟:

--> Call the `Hantera` method in the `Withdraw` class 
--> Change the List in the "Statement"/Log class 
--> Call the `Hantera` method in "Statement"/Log class 
--> Doesn't print out anything 

請告訴我,如果你誤解了我,遺憾的命名(這是一個在瑞典)。歡迎您更改此文本和標題。

+0

不應該'Kontoutdrag.Hantera'做'*什麼*與'Konto'你通過? –

+0

我們需要看到「Main」中的代碼 –

+0

@RowlandShaw是的,這是未完成的。 – Diar78

回答

0
case "c": 
     kom = new Kontoutdrag(); 
     break; 
// … 

new HanteraKommando().Hantera(kom, list[i]); 

如您所見,您正在創建一個新的Kontoutdrag對象,然後您將該對象傳遞給Hantera命令。當然,新的Kontoutdrag也帶有自己的(空)列表,所以當你調用該方法時,它不會打印任何東西。

相反,您應該從Konto對象中獲取現有對象。這樣的事情:

Konto konto = list[i]; 

Kommando kom = null; 
string kommando = Console.ReadLine(); 
switch (kommando) 
{ 
    // … 
    case "c": 
     // get the existing object 
     kom = konto.ku; 
     break; 
} 

new HanteraKommando().Hantera(kom, konto); 
+0

非常感謝! – Diar78