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
相关产品推荐
相关产品推荐

