1.每次打印出来时,如何让我的随机数变得不同? 2.有什么基本的东西可以改进吗? [重复]

问题描述 投票:-3回答:1

这个问题在这里已有答案:

我对整个编程非常陌生,C#是我的第一语言。在过去的几周左右的时间里,我一直在研究这个项目,它为用户提供了3个选项,让他们可以选择使用随机数生成器,计算器还是掷骰子。

到目前为止一切都很顺利。我一直专注于异常处理和评论,以确保一切尽可能清晰。我遇到的一个问题是,我不确定如何修复是在我的骰子滚动程序中,它打印出相同的随机骰子数x次,而不是每次打印出不同的随机数。所以,如果你能帮助我解决这个问题,那就太棒了。这只是代码;

static void rollDice()
    {
        Boolean rollAgain = false;
        while (rollAgain == false)
        {
            Console.Write("Enter the number of sides on your dice: "); //Need to do exception handling for this
            int totalSides = int.Parse(Console.ReadLine());
            Console.WriteLine("How many times would you like to roll the {0} sided dice?", totalSides); //Need to do exception handling for this
            int numRolls = int.Parse(Console.ReadLine());
            for (int i = 0; i < numRolls; i++)
            {
                Random rnd = new Random();
                int diceNumber = rnd.Next(1, totalSides);
                Console.Write("\t" + diceNumber);
            }
            Console.WriteLine("\nIf you like to roll a dice with a different number of sides enter Y\nTo exit the application enter N");
            string doRerun = Console.ReadLine();
            if (doRerun == "Y" || doRerun == "y")
            {
                rollAgain = false;
            }
            else if (doRerun == "N" || doRerun == "n")
            {
                rollAgain = true;
            }
        }
    }

此外,由于我是一般的新手,我认为来自更有经验的用户的一些反馈将使我整体受益。我犯过什么错误>我违反了任何非正式规则?请让我知道我会非常感激。这是所有的代码;

static void Main(string[] args)
    { 
        Boolean chooseRun = false;
        while (chooseRun == false)
        {
            Console.WriteLine("To use the calculator enter C\nTo use the random number generator enter R\nTo roll a dice enter D");
            string chooseProc = Console.ReadLine();
            if (chooseProc == "C" || chooseProc == "c")
            {
                calculator();
                chooseRun = true;
            }
            else if (chooseProc == "R" || chooseProc == "r")
            {
                numGenerator();
                chooseRun = true;
            }
            else if (chooseProc == "D" || chooseProc == "d")
            {
                rollDice();
                chooseRun = true;
            }
            else
            {
                Console.WriteLine("Sorry that was an invalid input. Please try again");
                chooseRun = false;
            }
        }
        Console.Write("Goodbye");
        Console.ReadKey();
    }
    /// <summary>
    /// Here I have a simple calculator that can do basic functions such as subtraction and then I give them the option to use it again
    /// </summary>
    static void calculator()
    {
        int loop = 1;

        while (loop == 1)
        {
            Console.WriteLine("You chose to use the calculator!\nPress the enter key to start"); //Greet the user and give them the option of when they want to start the calculator based upon when they choose to click the enter key
            Console.ReadKey(true);

            int num1 = 0; //Declaring variables 
            int num2 = 0;
            string operation = "";
            int answer;

            Boolean gotnum1 = false;
            while (gotnum1 == false)
            {
                Console.Write("Enter the first number in your equation: "); //Then I give them a message to greet them and give them the option of when to start the calculator  
                try
                {
                    num1 = int.Parse(Console.ReadLine());
                    gotnum1 = true;
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }
            }

            Boolean gotnum2 = false;
            while (gotnum2 == false)
            {
                Console.Write("Enter the second number in your equation: "); //Then I give them a message to greet them and give them the option of when to start the calculator  
                try
                {
                    num2 = int.Parse(Console.ReadLine());
                    gotnum2 = true;
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }
            }
            Boolean gotOpr = false;
            while (gotOpr == false)
            {
                Console.Write("Ok now enter your operation ( x , / , +, -) ");
                operation = Console.ReadLine();
                switch (operation)
                {
                    case "x":
                        answer = num1 * num2;
                        Console.WriteLine(num1 + " " + operation + " " + num2 + " = " + answer);
                        gotOpr = true;
                        break;
                    case "X":
                        answer = num1 * num2;
                        Console.WriteLine(num1 + " " + operation + " " + num2 + " = " + answer);
                        gotOpr = true;
                        break;
                    case "/":
                        try
                        {
                            answer = num1 / num2;
                            Console.WriteLine(num1 + " " + operation + " " + num2 + " = " + answer);
                            gotOpr = true;
                        }
                        catch (DivideByZeroException e)
                        {
                            Console.WriteLine("You cannot divide by zero");
                        }
                        break;
                    case "+":
                        answer = num1 + num2;
                        Console.WriteLine(num1 + " " + operation + " " + num2 + " = " + answer);
                        gotOpr = true;
                        break;
                    case "-":
                        answer = num1 - num2;
                        Console.WriteLine(num1 + " " + operation + " " + num2 + " = " + answer);
                        gotOpr = true;
                        break;
                    default:
                        Console.WriteLine("Sorry that is an invalid input");
                        gotOpr = false;
                        break;
                }
            }

            Console.WriteLine("Do you want to use the calculator again? Select;\nIf you would please enter /Y/\nIf not please enter /N/");
            string rerun = Console.ReadLine();
            if (rerun.ToUpper() == "N")
            {
                loop = 0;
            }
        }
    }
    /// <summary>
    /// This procedure generates a random number and gives the user the option as to whether they would like to generate another 
    /// </summary>
    static void numGenerator()
    {
        Console.WriteLine("You chose to use the random number generator");
        Boolean moreNum = false;
        while (moreNum == false)
        {
            Random r = new Random();
            int n = r.Next();
            Console.WriteLine(n);
            Console.WriteLine("If you would like another number enter Y, otherwise please enter N");
            string rerun = Console.ReadLine();
            if (rerun == "Y" || rerun == "y")
            {
                moreNum = false;
            }
            else if (rerun == "N" || rerun =="n")
            {
                moreNum = true;
            }
        }
    }
    /// <summary>
    /// In this procedure a virtual dice is rolled of a user inputted number of times, this too gives the user the option to roll the dice again after rolling it x times
    /// </summary>
    static void rollDice()
    {
        Boolean rollAgain = false;
        while (rollAgain == false)
        {
            Console.Write("Enter the number of sides on your dice: "); //Need to do exception handling for this
            int totalSides = int.Parse(Console.ReadLine());
            Console.WriteLine("How many times would you like to roll the {0} sided dice?", totalSides); //Need to do exception handling for this
            int numRolls = int.Parse(Console.ReadLine());
            for (int i = 0; i < numRolls; i++)
            {
                Random rnd = new Random();
                int diceNumber = rnd.Next(1, totalSides);
                Console.Write("\t" + diceNumber);
            }
            Console.WriteLine("\nIf you like to roll a dice with a different number of sides enter Y\nTo exit the application enter N");
            string doRerun = Console.ReadLine();
            if (doRerun == "Y" || doRerun == "y")
            {
                rollAgain = false;
            }
            else if (doRerun == "N" || doRerun == "n")
            {
                rollAgain = true;
            }
        }
    }
c# console-application
1个回答
1
投票

您应该只创建一次Random对象,通常创建在静态字段中(如果您多次创建它,它将每次生成相同的值)

static Random rnd = new Random();
© www.soinside.com 2019 - 2024. All rights reserved.