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

C# 使用数组实现掷骰子功能遇结果固定加3问题求解

问题根因

  • 核心问题是变量作用域冲突+变量名不匹配:你在类顶部声明了全局成员变量indexDicepath01、indexDicepath02、indexDicepath03,但在三个生成随机骰子的方法中,要么重新用int声明了同名局部变量,要么局部变量名和全局成员名不一致,随机生成的索引值只赋值给了方法内的局部变量,从来没有更新到全局成员变量上。
  • 全局成员变量的默认初始值为0,因此你在松开按钮计算时,永远是(0+1)+(0+1)+(0+1)=3,结果自然固定为3。
  • 额外优化点:不需要声明3个Random实例,短时间内实例化多个Random容易因为种子相同生成重复的随机序列,保留1个全局实例即可;代码中的文件路径没有加逐字字符串标识@,\会被C#识别为转义符,大概率会导致图片加载失败。

修复方案

1. 修正三个随机骰子方法的赋值逻辑

private void Random_Pic01()
{
    // 去掉int声明,直接给全局成员变量赋值
    indexDicepath01 = picture01.Next(Dicepath.Length);
    Path01 = Dicepath[indexDicepath01];
}
private void Random_Pic02()
{
    // 修正变量名匹配全局成员,同时去掉int声明
    indexDicepath02 = picture02.Next(Dicepath.Length);
    Path02 = Dicepath[indexDicepath02];
}
private void Random_Pic03()
{
    // 修正变量名匹配全局成员,同时去掉int声明
    indexDicepath03 = picture03.Next(Dicepath.Length);
    Path03 = Dicepath[indexDicepath03];
}

2. 可选优化:合并Random实例

将类顶部的三个Random声明替换为单个实例即可:

// 替换原有的三个Random声明
Random rnd = new Random();

后续三个随机方法都调用rnd.Next(Dicepath.Length)生成随机索引即可。

3. 路径格式修正

给数组中所有路径字符串前加@前缀,避免转义符问题:

string[] Dicepath = {@"A:\Au Personal Folder\Learning\ปี 1 เทอม 1\DIT101\Week 21-9-2021\Assignment\Dice paths\1.png",
    @"A:\Au Personal Folder\Learning\ปี 1 เทอม 1\DIT101\Week 21-9-2021\Assignment\Dice paths\2.png",
    // 剩余路径全部加@前缀即可
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 04:30:01