我刚刚开始学习C#。我对是否以及是否感到最自在。现在,我正在开发一个程序,该程序在其中写入IP地址,并且需要键入正确的子网以及所有其他内容。使用if和else编写代码花费的时间太长,所以我想知道是否有一种更快的方法。
Random r = new Random();
int randomip = r.Next(256);
int secondip = r.Next(256);
int subnetip = r.Next(24, 31);
int numbers = subnetip;
Console.WriteLine("192.168." + randomip + "." + secondip + "/" + subnetip);
Console.Write("Type the correct netID: ");
Console.ReadLine();
Console.Write("Type the correct subnet: ");
Console.ReadLine();
if (numbers == 24)
{
Console.WriteLine("correct netID is: 192.168." + randomip +
"." + secondip / 256);
Console.WriteLine("correct subnet is: 255.255.255.0");
} else if (numbers == 25)
{
Console.WriteLine("correct netID is: 192.168." + randomip +
"." + secondip / 128);
Console.WriteLine("correct subnet is: 255.255.255.128");
} else if (numbers == 26)
以此类推...与其他数字一起使用。有没有更快,更轻松的方法来使其工作?它可以工作,但是如果我想增加更多的数字,那将会是一个问题
如果您倒想,这些是根据 numbers
31 => 2
30 => 4
29 => 8
28 => 16
27 => 32
26 => 64
25 => 128
24 => 256
换句话说,它们是递增数字的幂的两倍。
31 => 2^1
30 => 2^2
29 => 2^3
28 => 2^4
27 => 2^5
26 => 2^6
25 => 2^7
24 => 2^8
换句话说,2以32的幂减去 numbers
31 => 2^(32-31)
30 => 2^(32-30)
29 => 2^(32-29)
28 => 2^(32-28)
27 => 2^(32-27)
26 => 2^(32-26)
25 => 2^(32-25)
24 => 2^(32-24)
换一种说法,
var divisor = Math.Pow(2, 32-numbers);
var subnet = 256 - divisor;
下降到4行,没有switch
或if
。好极了!
Console.WriteLine("correct netID is: 192.168." + randomip + "." + secondip / divisor);
Console.WriteLine("correct subnet is: 255.255.255." + subnet);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句