如何在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' ?

如何在for循环方法中打印多个值

您的第一个方法返回聚会中最后一个人是否拥有精灵魅力,而不是是否有人拥有。您可能需要重构方法,以便它们返回每个盟友的信息。你可以通过将你的第一种方法改为来做到这一点

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;
    }

好吧,你可以做这个简单的事情

  • 在aFaerie_Charm方法中而不是布尔返回int
  • 在if块中的aFaerie_Charm方法上,如果HasItem返回true,则返回index(i)值,否则返回-1。
  • 现在,在您的a2mrs方法检查中,它大于0或小于0
  • 因此,如果>0,那么你就有了索引值,所以你可以使用它。

    然而,在Faerie_Charm方法中,猜测您需要在for循环中使用一个break语句。请检查