首页 > 解决方案 > 函数未正确迭代和显示列表

问题描述

预期结果:用户输入某些症状,程序会将它们从假变为真,例如,如果头痛和呕吐都=真,那么流感=真等。

实际结果:症状在命令行中未正确显示 true 或 false。


代码:

我已将其初始化为 bool 列表并创建了以下列表:

Dictionary<string, bool> FACTS = new Dictionary<string, bool>();

这是我的 addFACTS() 函数的样子:

void addFACTS()
    {
        FACTS.Add("headache", false);
        FACTS.Add("vomiting", false);
    }

这是我的 countFACTS() 函数的样子:

private int countFACTS()
    {
        int count = 0;
        foreach (KeyValuePair<string,bool> fact in FACTS)
        {
            count++;
        }
        return count;
    }

以下是导致列表显示不正确的函数:

private void infer()
    {
        do
        {
            numberOfFacts = countFACTS();
            (FACTS["headache"] && FACTS["vomiting"]) ? FACTS["flu"] = true : FACTS["flu"] = false;
        }
        while (numberOfFacts != countFACTS());
    }

标签: c#

解决方案


首先,您要将列表转换为字典。

Dictionary<string, bool> FACTS = new Dictionary<string, bool>();

要添加到字典,您需要提供唯一的键和值。您的案例中的关键将是症状,例如头痛,并且该值为真或假。

FACTS.Add("headache", true);

填写列表以访问它后,您可以做一些事情,FACTS["headache"]但请注意一些事项。

索引字典时区分大小写

如果缺少键,使用[""](索引)语法将引发错误(考虑使用 TryGetValue 或 Linq 以获得更好的访问)。

更新字典后

您可以简单FACTS.Count地获取字典中的记录数,以便删除 countFACTS 函数。

您的代码不会修改字典,因此您的 do/while 循环将永远不会循环第二次。不知道这里的意图是什么?

使用简写 if 语句(三元运算符)时,它需要位于 the 的右侧,=因此它应该是

FACTS["flu"] = FACTS["headache"] && FACTS["vomiting"] ? true : false;

这可以进一步简化,因为 true 的结果是 true 你可以这样做

FACTS["flu"] = FACTS["headache"] && FACTS["vomiting"];


推荐阅读