如何生成随机值并以字母表显示

时间:2016-09-09 13:45:32

标签: c# asp.net

我有一个方法可以显示指定长度的1到26之间的随机数。

 public string RandomDigits(int length)
    {
        var random = new Random();
        string s = string.Empty;

        for (int i = 0; i < length; i++)
            s = String.Concat(s, random.Next(1,27).ToString()+" ");

        return s;
    }

如何以字母表显示返回的值。 即该方法返回

1 10 7 2 11

我想得到   A J G B K

7 个答案:

答案 0 :(得分:1)

以下是使用char而不是已定义字符串的解决方案的变体。这使用char数组,然后在结尾处将其转换为字符串。比连接字符串更有效。

public string RandomDigits(int length)
{
    var random = new Random();
    var chars = new char[length];
    for (int i = 0; i < length; i++)
        chars[i] = (char) random.Next('A', ('Z' + 1));
    return string.Join(" ", chars);
}

答案 1 :(得分:0)

public string RandomDigits(int length)
{
    // Define your char set
    var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

    var random = new Random();
    string s = string.Empty;

    for (int i = 0; i < length; i++)
        s = String.Concat(s, chars[random.Next(0,26)] +" ");

    return s;
}

答案 2 :(得分:0)

是的,我已经创建了一个dotnetfiddle来显示输出。

using System;

public class Program
{
    public static void Main()
    {
        var s = RandomDigits(5);

        Console.WriteLine(s);
    }

    public static string RandomDigits(int length)
    {
        char[] alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray();

        var random = new Random();
        string s = string.Empty;

        for (int i = 0; i < length; i++)
            s = String.Concat(s, alphabet[random.Next(0,26)] +" ");

        return s;
    }
}

希望这有帮助!

答案 3 :(得分:0)

不需要char数组,使用char和0到25之间的数字:

((char)('A'+$randomNumber)).ToString()

答案 4 :(得分:0)

使用StringBuilder减少内存分配,只需在[0,26]之间生成一个随机数,然后将其添加到&#39; A&#39;:

public string RandomDigits(int length)
{
    var random = new Random();
    var builder = new StringBuilder(length);

    for(int i = 0; i < length; i++)
    {
        var offset = random.Next(0, 26);
        char c= (char)('A' + offset);
        builder.Append(c);
    }    

    return builder.ToString();
}

如果你想做更多的事情,那么Linq-ish然后试试这个:

public IEnumerable<char> YieldRandomDigits(int length)
{
    var random = new Random();
    var selector = Enumerable.Range(1,length).Select(i => (char)('A' + random.Next(0, 26)));
    return selector;
}

你现在可以说:

var s = string.Join("", YieldRandomDigits(10));

答案 5 :(得分:0)

执行此操作的最小计算时间方法之一是声明一个数组字母,而不是直接使用random int,将其用作此字母数组的索引

using System;

public class Program
{
    static public string RandomDigits(int length)
        {
            var random = new Random();
            string s = string.Empty;
            char[] alphabets = { 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};

            for (int i = 0; i < length; i++)
                s = String.Concat(s, alphabets[random.Next(0,26)].ToString()+" ");

            Console.WriteLine(s);
            return s;
        }   

    public static void Main()
    {
        Console.WriteLine("Hello World");
        Console.WriteLine(RandomDigits(7));

    }


}

请参阅此处https://dotnetfiddle.net/AsHX32

答案 6 :(得分:0)

谢谢大家。 这实际上就是我需要做的事情

private String Number2String(int number, bool isCaps)
    {
       Char c = (Char)((isCaps ? 65 : 97) + (number - 1));

        return c.ToString();
    }

这是一个将数字转换为字符串的方法 然后将6个随机数或任意长度的随机数添加到列表中。

      List<int> list = new List<int>();
        var random = new Random();
        string s = string.Empty;

        for (int i = 0; i < 6; i++)
        {
            list.Add(random.Next(1, 27));

        }

        foreach (int li in list)
        {
            s = String.Concat(s, Number2String(li, true) + " ");
           //string use =  Number2String(li, true);

        }
        MessageBox.Show(s);

遍历列表并将其转换为字母表。 这就是我需要实现的目标。我猜我的问题构建得不好。 这本来可以得到相当于生成的随机数的字母表。 没有得到随机字母数字。