首页 > 解决方案 > 为什么我的代码不是每次都增加一个变量?

问题描述

我正在尝试制作一个循环随机数的代码,直到它得到一个六(这部分正在工作),然后如果你在不到 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;
    }
}

标签: c#

解决方案


您应该使用可用的工具来解决这个问题(即调试器),但看起来您是新手,所以我会冒着投反对票的风险来帮助您...

您拥有的代码非常接近您的需要。但是,您遇到的问题是使用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循环)。那取决于你...

我在这里制作了一个简单的“硬币翻转”游戏,因此您可以看到我正在谈论的示例。为您完成工作不会帮助您学习,但这应该足以为您提供上下文。


推荐阅读