随机未获得其最大值

本文关键字:最大值 随机 | 更新日期: 2023-09-27 18:22:02

我正在尝试创建一个控制台应用程序,该应用程序基本上是某些网站和银行等使用的安全措施的非常简单版本。

用户

将声明一个"秘密单词"(存储在字符串生成器中(,之后,每次用户尝试访问程序/网站等时,他们都必须输入单词的字符X(X通过随机生成(。但是,随机永远不会选择单词的最后一个字符。

示例:当我使用 2 个字母的 Secret 单词时,它只会选择第一个字母,当我尝试通过其他方法让它选择字母时,它认为有一个字母 0 会抛出整个应用程序。

为什么永远不会选择最后一个字符?请帮助(C#的新手(

代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
       namespace randomCharSelecter
       {
            class Program
           {
                static void Main(string[] args)
                {
                    StringBuilder stringBuilder = new StringBuilder();
                    Console.WriteLine("Please Enter Your Secret Word");
                    stringBuilder.Append(Console.ReadLine());           

                    EnterInput:
                    Random rndSelect = new Random();
                    int randomChar1 = rndSelect.Next(1, (stringBuilder.Length));
                    Console.WriteLine("Please enter character {0} of your secret word", randomChar1);
                    string userInput = Console.ReadLine();
                    if (userInput == (Convert.ToString(stringBuilder).Substring(randomChar1 - 1, 1)))
                        Console.WriteLine("Correct!");
                    else
                    {
                        Console.WriteLine("Incorrect! Please try again");
                        goto EnterInput;
                    }
                    Console.ReadLine();
                }
            }
        }

随机未获得其最大值

这是预期的行为。从文档中:

返回值
类型:系统.Int32

大于或等于 minValue小于 maxValue 的 32 位有符号整数;也就是说,返回值的范围包括 minValue,但不包括 maxValue。如果最小值等于最大值,则返回最小值

换句话说,如果你想要一个介于 1 和 stringBuilder.Length 之间的随机整数(即结果可能等于 stringBuilder.Length (,你需要使用:

int randomChar1 = rndSelect.Next(1, stringBuilder.Length + 1);

或者,您可以简单地修改代码以使用从零开始的索引:

int randomChar1 = rndSelect.Next(0, stringBuilder.Length);
...
if (userInput == (Convert.ToString(stringBuilder).Substring(randomChar1, 1)))
    Console.WriteLine("Correct!");

你的问题是Random.Next(int val1, int val2)的第二个值是 end exclient。所以你最终将不得不做stringBuilder.Length + 1

来源: http://msdn.microsoft.com/en-us/library/2dx6wyd4(v=vs.110(.aspx