C# 检查数组是否包含相同的数字
我想做一个简单的骰子游戏。它完全在控制台中。 用户可以设置无限数量的骰子。然后,游戏必须告诉你,所有的骰子在同一时间需要掷多少个骰子才能达到6 我试过这样的方法C# 检查数组是否包含相同的数字,c#,predicate,dice,C#,Predicate,Dice,我想做一个简单的骰子游戏。它完全在控制台中。 用户可以设置无限数量的骰子。然后,游戏必须告诉你,所有的骰子在同一时间需要掷多少个骰子才能达到6 我试过这样的方法 int i = 0; int[] throws = new int[4000]; bool success = false; do { throws[1] = dice.Next(1, 7); throws[2] = dice.Next(1, 7);
int i = 0;
int[] throws = new int[4000];
bool success = false;
do
{
throws[1] = dice.Next(1, 7);
throws[2] = dice.Next(1, 7);
throws[3] = dice.Next(1, 7);
throws[4] = dice.Next(1, 7);
throws[5] = dice.Next(1, 7);
throws[6] = dice.Next(1, 7);
if (Array.TrueForAll(throws, 6))
{
success = true;
}
i++;
} while (success != true);
但是trueforallsays在一个叫做谓词的东西上失败了,我一直无法完全理解它
还有别的办法吗
这里有点卡住了。。希望有人能帮上忙。谓词是一种方法,它以一个对象/变量为参数,检查该对象/变量的条件,然后返回
true
或false
。。现在谈谈这个问题:
而不是做:
if (Array.TrueForAll(throws, 6))
做:
但这是什么
x => x == 6
这正是我们所说的谓词吗
是一个lambda,可以理解为:
取数组中的每个元素,在变量X中。现在计算X==
六,
请参阅文档。第二个参数应该是一个函数,如果要检查某个项的保留,则返回true,否则返回false。如果throws是bool[],则需要throws。TrueForAll(b=>b)@vc74 throws是int[]throws=new int[4000]@那你的第二个问题来了。您应该只将数组设置为所需的大小,否则您的
TrueForAll
将检查这些额外的索引-它们可能不都满足您的谓词。@andrelange91然后您可以使用:if(throws.all(i=>(i==6))另请参见此处的示例:@andrelange91共享爱(并节省人们的时间)如果这解决了您的问题,请将此标记为已回答!@RufusL现在完成,只是想运行它以确保所有问题都得到解决^^
x => x == 6