我目前正在构建一个C#应用程序,它正在生成一个随机的9位数字。我正在寻找一种方法来排除以“666”开头的数字。我如何编写一个语句来排除以某些数字开头的数字。
以下是代码段,以防它有用。
Random SSN = new Random();
string temp = "";
int num = SSN.Next(100000000, 999999999);
temp = num.ToString();
谢谢!
答案 0 :(得分:5)
嗯,你可以写:
int num;
do {
num = SSN.Next(100000000, 999999999);
} while (num >= 666000000 && num < 667000000);
(我最初也使用了字符串比较,但由于我们总是得到9位数字,我们可以轻松地进行数字比较。)
答案 1 :(得分:4)
简单的方法是:
Random SSN = new Random();
string temp = "";
do
{
int num = SSN.Next(100000000, 999999999);
temp = num.ToString();
} while (temp.StartsWith("666"));
如果您真的想要提高效率并且想要不惜一切代价避免字符串比较和无限循环,那么您可以使用:
Random SSN = new Random();
int num = SSN.Next(100000000, 998999999);
if (num >= 666000000)
num += 1000000;
答案 2 :(得分:2)
Random SSN = new Random();
string temp = "";
double d = 0.6; // This will help on of choosing one half
int n1 = SSN.Next(100000000, 666000000);
int n2 = SSN.Next(667000000, 999999999);
int num = SSN.NextDouble() > d ? n1 : n2;
temp = num.ToString();
答案 3 :(得分:0)
Random SSN = new Random();
string temp = "";
do
{
int num = SSN.Next(100000000, 999999999);
temp = num.ToString();
} while(num.IndexOf("666") == 0);
答案 4 :(得分:0)
这具有O(1)的复杂性。
string temp = "";
if (SSN.Next(0,999999999) < 588339221)
{
temp = SSN.Next(100000000, 666000000).ToString();
}
else
{
temp = SSN.Next(667000000, 1000000000).ToString();
}