You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#代码执行始终返回0问题求助:随机数赋值逻辑排查

问题排查与修复

你遇到的核心问题是Nummer1始终返回0,本质是**bepaal()方法从未被正确触发执行**,导致三个_nummer字段一直保持默认值0。以下是具体问题点和修复方案:


问题1:bepaal()方法触发逻辑错误

你的Punten属性setter中绑定了bepaal(),但按钮点击事件里完全没有操作Punten属性,导致bepaal()从未执行,三个_nummer自然还是默认的0值。

问题2:bepaal()判定逻辑冗余且不完整

多个if条件重复判断“三个数相等”的情况,完全冗余;同时未处理“没有相同数字”的场景,_punten会一直保持默认0。

问题3:Random实例化位置不合理

每次调用bepaal()都新建Random实例,短时间内多次调用会因系统时钟种子问题生成重复随机数,应该将Random作为类成员只实例化一次。


修复后的代码

修正后的Spel类

class Spel
{
    // 将Random改为类私有成员,仅实例化一次
    private readonly Random _rnd = new Random();
    
    private int _nummer1;
    public int Nummer1
    {
        get { return _nummer1; }
        set { _nummer1 = value; }
    }

    private int _nummer2;
    public int Nummer2
    {
        get { return _nummer2; }
        set { _nummer2 = value; }
    }

    private int _nummer3;
    public int Nummer3
    {
        get { return _nummer3; }
        set { _nummer3 = value; }
    }

    private int _punten;
    public int Punten
    {
        get { return _punten; }
        set { _punten = value; }
    }

    // 新增公共方法,主动触发随机数生成与分数计算
    public void GenereerNummersEnBepaalPunten()
    {
        _nummer1 = _rnd.Next(1, 4);
        _nummer2 = _rnd.Next(1, 4);
        _nummer3 = _rnd.Next(1, 4);
        
        // 简化判定逻辑
        if (_nummer1 == _nummer2 && _nummer2 == _nummer3)
        {
            _punten = 10;
        }
        else if (_nummer1 == _nummer2 || _nummer1 == _nummer3 || _nummer2 == _nummer3)
        {
            _punten = 5;
        }
        else
        {
            _punten = 0; // 明确无匹配时的分数
        }
    }
}

修正后的Controller类

public class Controller
{
    private Spel spl = new Spel();
    
    public int GetNummer1()
    {
        return spl.Nummer1;
    }

    // 添加触发随机数生成的方法
    public void StartNieuwRonde()
    {
        spl.GenereerNummersEnBepaalPunten();
    }
}

修正后的按钮点击事件

private void button1_Click(object sender, EventArgs e)
{
    teller++;
    // 先生成随机数,再获取数值
    spl.StartNieuwRonde();
    label1.Text = spl.GetNummer1().ToString(); 
    // 可按需扩展获取其他数值
    // label2.Text = spl.Nummer2.ToString();
    // label3.Text = spl.Nummer3.ToString();
    // labelPunten.Text = spl.Punten.ToString();
}

关键修复点总结

  • 新增GenereerNummersEnBepaalPunten()公共方法,主动触发随机数生成与分数计算,不再依赖Punten属性的setter。
  • 将Random改为类成员,避免短时间重复调用生成相同随机数。
  • 简化分数判定逻辑,去掉冗余条件,补充无匹配场景的分数处理。
  • 按钮点击时先调用生成方法,再获取数值,确保拿到最新的随机数。

内容的提问来源于stack exchange,提问作者Tuur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 23:50:29