c#写的代码,同样的代码用来随机生成数学题,为什么用Winform时候出来的内容都是重复的,用控制带程序就正常了?
版本是VS2022 .net6.0
winform一开始代码没有分到class里,我一开始是以为没有new一下不行,所以单独提出来了,控制台代码是直接复制过去的
这个是Winform代码:
```c#
public partial class frmText : Form
{
public frmText()
{
InitializeComponent();
}
//30个10以内加减法
private void button1_Click(object sender, EventArgs e)
{
Random r = new Random();
string ret = "";
for (int i = 0; i < 30; i++)
{
生成 a = new 生成();
ret += a.生成2();
ret += "\r\n";
}
textBox1.Text = ret;
}
}
public class 生成
{
Random r = new Random();
public string 生成2()
{
Random r = new Random();
return r.Next(0, 10) > 5 ? 生成一个加法() : 生成一个减法();
}
string 生成一个加法()
{
int x = r.Next(0, 9);
int y = r.Next(0, 9);
if (x + y <= 15)
{
return (x.ToString() + " + " + y.ToString());
}
else
{
return 生成一个加法();
}
}
string 生成一个减法()
{
int x = r.Next(0, 9);
int y = r.Next(0, 9);
if (x - y > 0)
{
return (x.ToString() + " - " + y.ToString());
}
else
{
return 生成一个减法();
}
}
}
这个是控制台代码:
```c#
for (int i = 0; i < 64; i++)
{
生成 s = new 生成();
Console.WriteLine(s.生成2());
}
Console.WriteLine();
public class 生成
{
Random r = new Random();
public string 生成2()
{
Random r = new Random();
return r.Next(0, 10) > 5 ? 生成一个加法() : 生成一个减法();
}
string 生成一个加法()
{
int x = r.Next(0, 9);
int y = r.Next(0, 9);
if (x + y <= 15)
{
return (x.ToString() + " + " + y.ToString() + " =");
}
else
{
return 生成一个加法();
}
}
string 生成一个减法()
{
int x = r.Next(0, 9);
int y = r.Next(0, 9);
if (x - y > 0)
{
return (x.ToString() + " - " + y.ToString() + " =");
}
else
{
return 生成一个减法();
}
}
}