为什么我的代码每次都不增加变量?

时间:2018-08-10 20:56:17

标签: c#

我正在尝试编写一个遍历随机数的代码,直到它得到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;
    }
}

2 个答案:

答案 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并提出退出条件。但是我认为这些教训的价值较小。