如何在for循环方法中打印多个值
本文关键字:打印 方法 for 循环 | 更新日期: 2023-09-27 18:26:36
我希望控制台为每个没有特殊item(afaerie_charm)
的盟友写入行false
,为代码中为true的盟友写入.25
:
public bool aFaerie_Charm()
{
var allylist = new List<Obj_AI_Hero>();
allylist.AddRange(HeroManager.Allies);
bool z = false;
for (int i = 0; i < allylist.Count; i++) //allylist.count = 4
{
z = Items.HasItem((int)ItemId.Faerie_Charm, allylist[i]);
}
return z;
}
在上述代码中,如果列表中的任何盟友(4个盟友)具有"faerie_charm",则z为true,否则为false。
现在,在代码的这一部分中:allylist[1]
(ally 2)有一个特殊项,所以bool返回true
,然后返回faerie = .25;
,a2mrs()
返回.25
,但问题是:
代码发现其中一个盟友有物品和.25
,但我不知道哪个盟友有,它没有返回"盟友2有物品,它的值是.25',这就是问题所在。需要建议或帮助。
public double a2mrs()
{
double faerie = 0;
if (aFaerie_Charm() == true)
{
faerie = .25;
}
return faerie;
}
static void Main(String[] args)
{
Console.WriteLine(a2mrs())
}
输出:.25
问题:从输出来看。25,我只知道其中一个盟友有物品,我不知道哪个盟友有物品。摘要:我如何重新处理代码,使其打印出这样的内容:
'ally 1 = false'
'ally 2 = .25'
'ally 3 = false'
'ally 4 = false' ?
您的第一个方法返回聚会中最后一个人是否拥有精灵魅力,而不是是否有人拥有。您可能需要重构方法,以便它们返回每个盟友的信息。你可以通过将你的第一种方法改为来做到这一点
public List<bool> aFaerie_Charm()
{
var allylist = new List<Obj_AI_Hero>();
allylist.AddRange(HeroManager.Allies);
List<bool> z = new List<bool>();
for (int i = 0; i < allylist.Count; i++) //allylist.count = 4
{
z.Add(Items.HasItem((int)ItemId.Faerie_Charm, allylist[i]));
}
return z;
}
然后打印:
public void printHasFaerieCharm()
{
List<bool> charms = aFaerieCharm();
for (int i = 0; i < charms.Count; ++i)
{
Console.WriteLine("Ally " + (i + 1) + ": " + (charms[i] ? ".25" : "false"));
}
}
但是,我建议您调整第一种方法,使其采用您要检查的项目的参数,并使用该参数,这样,当您希望其他项目具有相同的信息时,可以重用它。您可以使用第二种方法进行类似的操作,以更改在找到项目时打印的内容(以及要查找的项目),甚至将该信息添加到项目的类中(因此它将被称为类似printWhoHasItem(ItemId.FaerieCharm)
的信息,看起来类似"ally i: " + ItemId.Message
)。
这段代码在各个方面都是错误的。你知道aFaerie_Charm()的结果总是数组中最后一个盟友的检查结果吗?
首先,不能在代码的那个阶段混合布尔值和双精度。您需要(根据您的用例)决定其中一个,并在需要时对其进行解释。
您需要从aFaerie_Charm()返回Dictionary,然后在该字典中为数组中的每个盟友添加KeyValuePair,其中Key是该盟友的名称,Boolean是true或false。或者,您可以使Faerie_Charm接受盟友的输入参数,并为该特定盟友返回布尔值。
最后,您循环遍历该Dictionary,并以任何您想要的方式解释该布尔值以用于显示目的。
在林克,你会做一些类似的事情:
// Create dictionary, keys are names of allies, values says if that particular ally has "charm" or not
Dictionary<String, Boolean> allyData = (from x in HeroManager.Allies select new { Name = x.Name, HasCharm = Items.HasItem((int)ItemId.Faerie_Charm, x) }).ToDictionary(y => y.Name, z => z.HasCharm);
现在显示:
// Loop through dictionary
foreach (KeyValuePair<String, Boolean> a in allyData)
{
// Display ally's name and if that ally has "charm" then print ".25" and print "false" otherwise
Console.WriteLine("%s = %s", a.Key, (a.Value ? ".25" : "false"));
}
您可以在方法中再添加一行,如下所示:
public bool aFaerie_Charm()
{
var allylist = new List<Obj_AI_Hero>();
allylist.AddRange(HeroManager.Allies);
bool z = false;
for (int i = 0; i < allylist.Count; i++) //allylist.count = 4
{
z = Items.HasItem((int)ItemId.Faerie_Charm, allylist[i]);
//You got 'z' now print a line
Console.WriteLine("Ally " + (i + 1) + ": " + z ? ".25" : "false");
}
return z;
}
好吧,你可以做这个简单的事情
然而,在Faerie_Charm方法中,猜测您需要在for循环中使用一个break语句。请检查