C# 如何生成包含加号或减号(-or+;)的随机字符串

C# 如何生成包含加号或减号(-or+;)的随机字符串,c#,random,C#,Random,我在做一个数学游戏,我需要让它随机化-或+ 我已经试过了: Random rnd = new Random(); string name = rnd.Next(-, +); 但这不管用,有人能帮我吗? 注意:我是一个初学者,大概是这样的: Random rnd = new Random(); string value = ""; switch (rnd.Next(0, 2)) { case 0: value = "+"; break; ca

我在做一个数学游戏,我需要让它随机化
-
+

我已经试过了:

Random rnd = new Random();
string name = rnd.Next(-, +);  
但这不管用,有人能帮我吗? 注意:我是一个初学者,大概是这样的:

Random rnd = new Random();
string value = "";

switch (rnd.Next(0, 2))
{
    case 0:
        value = "+";
        break;
    case 1:
        value = "-";
        break;
}

正如一位评论员提到的那样,
Random
类不允许生成随机字母。但是,它确实提供了一个随机数生成函数:
Next()
。看

因此,生成一个随机的
+
-
变得非常简单-我们只需创建一个包含可能选项的数组,并生成一个介于0和数组长度之间的随机数。您可能会想,但是,等等,如果我的数组包含2个项,并且随机数为2,并且我尝试访问索引2处的数组,我不会得到索引越界异常吗?答案是否定的,因为上限在
Next()
函数中是独占的-它可以返回0到
上限-1之间的任何值

char[] options = {'+', '-'};
Random rnd = new Random();
int randomNumber = rnd.Next(0, options.Length);
char randomChar = options[randomNumber];
Random.Next()
将返回Random
integer
值。基于此,您可以区分它应该是
+
还是
-
。例如:

Random random = new Random(); // new Random object
int randomValue = random.Next(); // get new random value
int oneOrZero = randomValue % 2; // get either 1 or zero
string name = "";
if ( oneOrZero == 0 ) // if value is zero
{
    name = "-"; // name will contain minus sign
}
else 
{
    name = "+"; // else name will contain plus sign
}
您可以将其简化为一行:

string name = new Random().Next() % 2 == 0 ? "-" : "+";
使用LINQ的解决方案:

static void Main(string[] args)
{
    Random random = new Random();
    int count = 10;
    char[] plusesAndMinuses = new int[count]
        .Select(i => random.Next())
        .Select(i => i % 2 == 0 ? '+' : '-')
        .ToArray();

    string result = new string(plusesAndMinuses);
    Console.WriteLine(result);
}

我猜你是想掷硬币得到一个正数还是负数?如果只需要+或-的字符串,请尝试以下操作:

string name = (rnd.NextDouble() > 0.5)? "+" : "-";
然后,如果您正试图这样做,则可以连接:

name = name + rnd.Next(); // Or whatever
试一试


好吧,看看
Random
提供了哪些方法。提示:如果你得到一个0或1的随机数,你能把它转换成
'-'
'+'
?在我看来,即使忽略
random的重载列表,这也算不上是一次尝试。下一步
,语法根本无法工作。令人沮丧的是,编辑必须至少包含6个字符
options.Length+1
应该是
options.Length-1
。这得到了我的支持,它很短-简单且易于理解。Length返回实际计数,该计数为2,但数组的索引为零,因此
options。Length-1
将返回一个从0到1的数字,这是我们的预期行为,+是您的
options
数组中的索引0,-是索引1。@colim但上限是独占的,因此,即使您执行与
rnd.Next(0,options.Length)
相同的
rnd.Next(0,2)
,它是否仍能保证您在数组的范围内?我很抱歉,您是对的<代码>下一步
在这里只返回0或1,长度保持不变。可能是扩展方法的上下文。如果op要求将两个字符串随机化,他肯定不知道将扩展方法放在哪里+1尽管如此。可能值得一提的是,基于表达式的方法是C#6的东西,但我想大家都在运行visual studio>=2013的版本,我们都很乐意这么想。然而。。。。。。。。。。。。我见过一些混蛋。我见过一些狗屎很好,改为C#5用法@Cory What,你又在偷看我的桌面了吗?@EdPlunkett但是
Next
函数上限参数是独占的,所以如果你传递一个包含10个项目的数组,并执行
r.Next(0,array.Length)
r.Next(0,10)
,它仍然只会返回一个0到9范围内的数字(即数组的边界)。
string name = (rnd.NextDouble() > 0.5)? "+" : "-";
name = name + rnd.Next(); // Or whatever
    String[] symbols = new[]{"-", "+"};
    Random r = new Random();
    var sym = symbols[r.Next(0, 2)];