我正在尝试编写一个遍历随机数的代码,直到它得到6(此部分正在工作),然后如果您在少于6次尝试中滚动了6,但是我的代码不会占用我的“ amountOfMoney”变量如果您在不到六分钟的时间内得到它。即使您连续两次未满6次,输出的也是1。这是代码:
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;
}
}
答案 0 :(得分:6)
您应该使用可用的工具来解决此问题(即 debugger ),但是您似乎是新手,所以我冒风险投票希望能帮助您...
您拥有的代码非常接近您需要的代码。但是,您遇到的问题是结合使用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
循环)。这取决于你...
I made a simple "coin-flip" game here,因此您可以看到我在说什么的示例。为您完成工作不会帮助您学习,但这对于为您提供上下文信息来说绰绰有余。
答案 1 :(得分:-1)
我正在回答,因为这实际上是一个很棒的教学时间。您提供的是最常见的 design 问题(一种无语境的新词)的最简单示例之一。标签:
Start:
...似乎足够无辜。但是在编程世界中,事情实际上是非常非常具体的,而且这个标签还不够具体。到底是什么开始?
谁写了这段代码...
int attempt = 0;
int numberOfAttempts = 0;
int amountOfMoney = 0;
...认为这是游戏的开始。
谁写了这段代码...
goto Start;
...认为这是回合的开始。
要解决此问题,请使标签更具体,然后将其放在正确的位置。
P.S。另外,请勿使用goto
并提出退出条件。但是我认为这些教训的价值较小。