无法修改列表

时间:2015-10-10 14:23:39

标签: c#

我正在制作一个简单的ATM,我遇到了一个问题。

申请:http://pastebin.com/Uk1q5vpC
处理命令:http://pastebin.com/eG8XWM4w

帐户:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>d3 test</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.6/d3.min.js" charset="utf-8"></script>
</head>

<body>
<script>
//Width and Height
var w = 500;
var h = 50;

//Create SVG Element
var svg = d3.select("body")
            .append("svg")
            .attr("width", w)
            .attr("height", h);

var line = svg.append("path")
        .attr("stroke","orange")
        .attr("stroke-width", 7)
        .attr("fill","none");

//Global array
var linedata = [];

//random multiplier
var randNum = 50;

setInterval(function() {
    var random = {
        a: Math.floor(Math.random()*randNum),
    };

    linedata = [ "M 0 0 L 200 " + (100+random.a) ];

    line.data(linedata);

    line.attr("d", function(d) {
            return d;
        })
}, 10);

提款:

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!");
    }
}

我会尽力解释我的问题。我提取500美元,并希望将其保存到日志(列表)。如果您在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]); } } } 课程中选中public Kontoutdrag ku = new Kontoutdrag();,则每个帐户都有一个&#34;语句&#34; /日志。我修改了Account类中konto.ku.log.Add("Uttagning: " + inmatning);方法中的日志列表Hantera。但是在&#34;语句&#34; / Log中调用Withdraw方法时,它不打印任何内容。

步骤:

Hantera

请告诉我你是否误解了我并对命名感到抱歉(这是瑞典语)。欢迎您更改此文字和标题。

1 个答案:

答案 0 :(得分: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);