【问题标题】:Can I leave out values from the range, when I'm using Random.Next method?当我使用 Random.Next 方法时,我可以忽略范围中的值吗?
【发布时间】:2014-07-17 20:23:42
【问题描述】:

我正在制作一个密码生成器,它需要以随机顺序生成一串大小写字母。最大值和最小值由两个滑块指定。

我想为返回字符数字的 int 变量放弃两个范围 (65, 90) 和 (97, 122),而不是使用具有不同范围的两个变量。

当我使用 (65, 122) 的范围时,在生成密码时会给出我不想要的字符。

    private void btnPaswoord_Click(object sender, RoutedEventArgs e)
    {
        GenereerPaswoord();
    }

    private void GenereerPaswoord()
    {
        int iMin = Convert.ToInt32(sldMin.Value);
        int iMax = Convert.ToInt32(sldMax.Value);

        txtPasw.Text = GeefPaswoord(iMin, iMax );
    }


    private string GeefPaswoord(int iMin, int iMax)
    {
        string sPaswoord ="";

        if (sldMin.Value <= sldMax.Value)
        {
        int iLengtePaswoord = moWillekeurig.Next(iMin, iMax + 1);

        for (int iTeller = 0; iTeller < iLengtePaswoord; iTeller ++ )
        {
            int iAsciiWaarde = moWillekeurig.Next(65, 123);
            char cLetter = (char)iAsciiWaarde;

            sPaswoord = sPaswoord + cLetter;
        }
            }
        else
        {
            sldMin.Value = sldMax.Value;
        }
        return sPaswoord;
    }

【问题讨论】:

    标签: random range


    【解决方案1】:

    在这种情况下,范围很小,因此您可以生成一个字符数组,其中包含您可能希望在密码中使用的所有有效字符,然后从那里绘制:

    var passwordChars =
        Enumerable.Range(65, 26)
          .Concat(Enumerable.Range(90, 26))
          .Select(Convert.ToChar).ToArray();;
    
    var password = new string(
        Enumerable.Range(1, iLengtePaswoord)
          .Select(_ => moWillekeurig.Next(passwordChars.Length))
          .Select(x => passwordChars[x]));
    

    不过,为了准确回答您的问题,您可以使用所谓的拒绝抽样。也就是说,您抽取随机数,直到获得满足您条件的数字:

    int iAsciiWaarde;
    do
    {
        iAsciiWaarde = moWillekeurig.Next(65, 123);
    } while (iAsciiWaarde <= 90 || iAsciiWaarde >= 96);
    

    【讨论】:

      猜你喜欢
      • 2019-11-24
      • 1970-01-01
      • 2016-08-23
      • 1970-01-01
      • 2021-02-26
      • 2019-03-21
      • 1970-01-01
      • 2014-12-09
      • 1970-01-01
      相关资源
      最近更新 更多