c# - 为什么我的代码不是每次都增加一个变量?
问题描述
我正在尝试制作一个循环随机数的代码,直到它得到一个六(这部分正在工作),然后如果你在不到 6 次尝试中滚动了一个六,但如果你得到我的代码不会增加我的“amountOfMoney”变量它在不到六个。即使您连续两次低于 6,它也只能输出一个。这是代码:
class Program
{
static void Main(string[] args)
{
Start:
int attempt = 0;
int numberOfAttempts = 0;
int amountOfMoney = 0;
Random numberGen = new Random();
while (attempt != 6)
{
attempt = numberGen.Next(1, 7);
Console.WriteLine("Tom rolled: " + attempt + ".");
numberOfAttempts++;
}
Console.WriteLine("It took tom " + numberOfAttempts + " attempts to roll a six");
if(numberOfAttempts <= 6)
{
amountOfMoney++;
Console.WriteLine("You now have " + amountOfMoney + " dollars");
}
if(numberOfAttempts > 6)
{
amountOfMoney--;
Console.WriteLine("You now have " + amountOfMoney + " dollars");
}
Console.ReadKey();
goto Start;
}
}
解决方案
您应该使用可用的工具来解决这个问题(即调试器),但看起来您是新手,所以我会冒着投反对票的风险来帮助您...
您拥有的代码非常接近您的需要。但是,您遇到的问题是使用goto
,而不是理解变量范围的组合。
让我很清楚:goto 是非常糟糕的做法
当这条线被击中时:
goto Start;
它转到您Main()
方法的最顶部,接下来的 3 行声明您的变量并将它们设置为0
. 这就是为什么你永远无法坚持价值观的原因。
您需要删除goto
并使用您已经在做的循环。然后将要在循环迭代中保留的变量放在新循环的范围之外:
int amountOfMoney = 0;
while(someCondition)
{
//game logic here
amountOfMoney++;
}
//amountOfMoney has not reset every loop and now has all the changes you made to it
Console.WriteLine(amountOfMoney);
不过,对于新循环,您需要提出退出条件。是退出循环(和游戏)的用户输入,还是固定数量的循环(使用for
循环)。那取决于你...
我在这里制作了一个简单的“硬币翻转”游戏,因此您可以看到我正在谈论的示例。为您完成工作不会帮助您学习,但这应该足以为您提供上下文。
推荐阅读
- sitefinity - 在 Sitefinity 中创建自定义页面
- sql - 在 SQL 中为项目查找相同的标题和位置但不同的书目编号
- javascript - 条纹结帐集成
- c# - 如何判断圆弧是否顺时针?
- python - 如何从 python SSL 服务器发送可接受的 CA 列表?
- swift - 在 Swift SceneKit 中使用 CAKeyframeAnimation 为 SCN 对象设置动画
- mule - onprem 服务器 mule 4 中的缓存策略
- c# - 商店功能
代表 - mongodb - 查找 MongoDB 文档中每个属性类型的最后一个数组元素
- html - How to put the columns in a line (bootstrap table)