c# - 函数未正确迭代和显示列表
问题描述
预期结果:用户输入某些症状,程序会将它们从假变为真,例如,如果头痛和呕吐都=真,那么流感=真等。
实际结果:症状在命令行中未正确显示 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());
}
解决方案
首先,您要将列表转换为字典。
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"];
推荐阅读
- git - 构建错误:指定的路径、文件名或两者都太长
- flutter - 更改子项的属性不会触发 Flutter Getx 上的 UI 更改
- google-analytics - 在 Measurement Protocol 上查看 ID - Google Analytics
- docker - 无法在 docker 映像上运行本地集合
- javascript - GTM“在模板中发现无效的 HTML、CSS 或 JavaScript”
- python - 如何使用分隔符拆分文件?
- python - 如何使用函数对熊猫数据框进行布尔索引
- r - 删除 Markdown 输出中的换行符
- azure-devops - Azure devops 构建管道
- graphql - Apollo GraphQL - 处理 onConnect 和 OnDisconnect 事件