簡體   English   中英

隨機最小值不能大於最大值

[英]Random minvalue cannot be greater than maxvalue

我正在嘗試制作一個基於控制台的應用程序,其中程序將從用戶提供的范圍中減去兩個隨機數,但是當我輸入值時,它會給我一個“隨機最小值不能大於最大值”錯誤

這是我的代碼

static void subtract()
        {

            bool tryagain = true;
            while (tryagain == true)
            {
                Console.WriteLine("Choose a range of numbers");

                Console.Write("First Value: ");
                int firstval = Convert.ToInt32(Console.ReadLine());
                Console.WriteLine("First value: " + firstval);

                Console.WriteLine("Second Value: ");
                int secondval = Convert.ToInt32(Console.ReadLine());
                Console.WriteLine("Second value: " + secondval);
          
                Console.WriteLine(firstval + secondval);
                Random rnd = new Random();
                int firstrndval = rnd.Next(firstval, secondval); //this line is throwing the error
                int secondrndval = rnd.Next(firstval, secondval);
                Console.WriteLine("What is " + firstrndval + "-" + secondrndval);

                int potans;
                potans = Convert.ToInt32(Console.ReadLine());

                int ans = firstrndval - secondrndval;
                if (ans != potans)
                {
                    Console.WriteLine("Wrong Answer");
                }
                else
                {
                    Console.WriteLine("Correct Answer");
                }
                Console.WriteLine("Would you like to try again Y/N");
                string potbol = Console.ReadLine();

                potbol = potbol.ToUpper();

                if (potbol == "N")
                {
                    tryagain = false;
                }
            }
        }

如果 firstval 小於 secondval,我嘗試切換值,但它不起作用,我嘗試了元組方法和三變量方法,但它似乎對我不起作用,可能是因為它在 if-else 語句中。我是C# 相當新,似乎沒有解決這個問題。

你有兩個選擇
第一:如果第一個數字大於第二個,像這樣交換它們

            if (firstval > secondval)
            {
                int temp = firstval;
                firstval = secondval;
                secondval = temp;
            }

這將確保 firstVal 永遠是更大的
第二個解決方案:像這樣使用 Math.Min() 和 Math.Max()函數

int firstrndval = rnd.Next(Math.Min(firstval, secondval), Math.Max(firstval, secondval));
int secondrndval = rnd.Next(Math.Min(firstval, secondval), Math.Max(firstval, secondval));

這將確保兩個變量的最小值首先是 firstVal 或 SecondVal,並且對於兩個變量的 maxmimum 值都是相同的

首先,您必須找到兩者中較小的數字和較大的數字:

int smaller = Math.Min(firstval, secondval);
int biggest = Math.Max(firstval, secondval);

int firstrndval = rnd.Next(smaller, biggest + 1);
int secondrndval = rnd.Next(smaller, biggest + 1);

您必須將 +1 放在第二個參數上,因為第二個參數是獨占的。 這意味着,如果您輸入 rnd.Next(1,10),它只會返回 {1,2,3,4,5,6,7,8,9} 中的數字(絕不會返回 10)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM