0

一次抛四枚硬币时,我必须追踪所有结果

public void TossCoin()
{
    var coin1 = new string[]{ "Head", "Tail" };
    var coin2 =new string[] { "Head", "Tail" };
    var coin3 =new string[] { "Head", "Tail" };
    var coin4 =new string[] { "Head", "Tail" };
    var outcome =from first in coin1 
                 from second in coin2
                 from third in coin3
                 from fourth in coin4 
                 select new {possibility= coin1+","+coin2+","+coin3+","+coin4};

    foreach (var oc in outcome)
    {
        Console.WriteLine(oc.possibility.ToString());
    }
}

}

输出是

System.String[],......

什么地方出了错 ?

4

2 回答 2

11

您正在选择数组,您应该选择first, second...

select new { possibility = first + "," + second + "," + third + "," + fourth };

顺便说一句,您不需要创建不同的相同硬币,您可以多次投掷同一个硬币:

        var coin = new string[] { "Head", "Tail" };
        var outcome =
             from first in coin
             from second in coin
             from third in coin
             from fourth in coin
             select new { possibility = first + "," + second + "," + third + "," + fourth 
于 2009-10-18T15:33:13.630 回答
6

正如莫蒂所说,你选择了错误的东西。但是,我想指出这可以简化,因为您只需要一个数组,并且不需要匿名类型:

public void TossCoin()
{
    string[] sides = { "Head", "Tail" };
    var outcome = from first in sides 
                  from second in sides
                  from third in sides
                  from fourth in sides 
                  select first + "," + second + "," + third + "," + fourth;

    foreach (string oc in outcome)
    {
        Console.WriteLine(oc);
    }
}

要回答评论,要排除 HHHH 和 TTTT,您需要以下内容:

public void TossCoin()
{
    string[] sides = { "Head", "Tail" };
    var outcome = from first in sides 
                  from second in sides
                  from third in sides
                  from fourth in sides
                  where !(first == second && second == third && third == fourth)
                  select first + "," + second + "," + third + "," + fourth;

    foreach (string oc in outcome)
    {
        Console.WriteLine(oc);
    }
}
于 2009-10-18T15:38:32.167 回答