2015-10-10 61 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