我想创建一个最多可计数5的函数,并为5个字符串中的每一个创建一个随机值,例如“string p1 = rnd.Next(1, 15)
”<这发生在一个函数中,如下所示:
class dice
{
Random rnd = new Random();
public void rollit()
{
Random rnd = new Random();
}
public static void diceTeam()
{
Random rnd = new Random();
for (int i = 0; i < 5; i++)
{
if (i == 1)
{
//Random rnd = new Random();
string p1 = rnd.Next().ToString();
}
else if (i == 2)
{
//Random rnd = new Random();
rnd.Next();
}
else if (i == 3)
{
//Random rnd = new Random();
rnd.Next();
}
else if (i == 4)
{
//Random rnd = new Random();
rnd.Next();
}
else if (i == 5)
{
//Random rnd = new Random();
rnd.Next();
}
}
}
}
现在创建函数后,我想在带有标签的Windows窗体应用程序中显示随机值。我希望通过单击按钮来实现,并立即显示所有5个值,如下所示:
private void BtnDice_Click(object sender, EventArgs e)
{
if (teamBox.Checked == true)
{
player1.Text = dice.diceTeam();
}
}
但它在dice.diceTeam()上给了我一个红色的下划线,这可能是因为我需要指定p1字符串,但我该怎么做?
感谢您帮助我:)
答案 0 :(得分:0)
实际上你的方法的返回类型为void,而textBox则需要一个字符串。但是,我们还不清楚你想要返回什么 - 我只是假设你想要返回一个特定的随机数。然后你可以用这个:
public static string diceTeam()
{
Random rnd = new Random();
string res = "";
for (int i = 0; i < 5; i++)
{
if (i == 1)
{
//Random rnd = new Random();
res += rnd.Next().ToString();
}
else if (i == 2)
{
//Random rnd = new Random();
res += rnd.Next().ToString();
}
else if (i == 3)
{
//Random rnd = new Random();
res += rnd.Next().ToString();
}
else if (i == 4)
{
//Random rnd = new Random();
res += rnd.Next().ToString();
}
else if (i == 5)
{
//Random rnd = new Random();
res += rnd.Next().ToString();
}
}
return res;
}
但是,我不明白你的代码应该做什么 - 我的意思是,为什么你要检查我有什么价值,如果你每次都做同样的事情?您可以像这样简化此代码:
public static string diceTeam() => Enumerable.Repeat(new Random(), 5)
.Select(rnd => rnd.Next().ToString())
.Aggregate((s0, s1) => $"{s0},{s1}");
我不确定你想达到这个目标,否则你必须澄清你的意图。
修改强>:
在看到你的评论后,我更加困惑。你只想要p1可用吗?然后你可以这样做:
public static string diceTeam() => new Random().Next().ToString();
但如果你真的希望你的p1可用,你必须将它作为参考(我在这里使用out
):
public static void diceTeam(out string p1)
{
Random rnd = new Random();
p1 = "";
for (int i = 0; i < 5; i++)
{
if (i == 1)
{
//Random rnd = new Random();
p1 = rnd.Next().ToString();
}
else if (i == 2)
{
//Random rnd = new Random();
rnd.Next();
}
else if (i == 3)
{
//Random rnd = new Random();
rnd.Next();
}
else if (i == 4)
{
//Random rnd = new Random();
rnd.Next();
}
else if (i == 5)
{
//Random rnd = new Random();
rnd.Next();
}
}
}
可再次简化为
public static void diceTeam(out string p1) => p1 = new Random().Next().ToString();
你必须像这样调用这个方法:
private void BtnDice_Click(object sender, EventArgs e)
{
if (teamBox.Checked == true)
{
dice.diceTeam(out string result);
player1.Text = result;
}
}
有关out
关键字的详细信息,请查看以下内容:https://msdn.microsoft.com/de-de/library/t3c3bfhx.aspx。
修改强>
如果您确实希望p1
随处可用,则必须使用全局静态变量:
public static string p1;
public static void diceTeam()
{
p1 = "";
Random rnd = new Random();
for (int i = 0; i < 5; i++)
{
if (i == 1)
{
//Random rnd = new Random();
p1 = rnd.Next().ToString();
}
else if (i == 2)
{
//Random rnd = new Random();
rnd.Next();
}
else if (i == 3)
{
//Random rnd = new Random();
rnd.Next();
}
else if (i == 4)
{
//Random rnd = new Random();
rnd.Next();
}
else if (i == 5)
{
//Random rnd = new Random();
rnd.Next();
}
}
}
并称之为:
private void BtnDice_Click(object sender, EventArgs e)
{
if (teamBox.Checked == true)
{
dice.diceTeam();
player1.Text = dice.p1;
}
}
并且
dice.diceTeam (out string p1, p2, p3, p4, p5);
不会工作 - 您必须使用:
dice.diceTeam (out string p1, out string p2, out string p3, out string p4, out string p5);