panyuan922 2022-11-15 11:12 采纳率: 50%
浏览 7

c#写的代码,同样的代码用来随机生成数学题,为什么用Winform时候出来的内容都是重复的,用控制带程序就正常了?

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 生成一个减法();
        }
    }
}

  • 写回答

3条回答 默认 最新

  • 於黾 2022-11-15 11:28
    关注

    Random r = new Random();
    要定义成全局变量,你放按钮里每次生成一个新的,那随机出来的数也是一样的

    评论

报告相同问题?

问题事件

  • 修改了问题 11月15日
  • 创建了问题 11月15日

悬赏问题

  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本