如果代码,还有其他方法可以写这个吗?

1 c# if-statement

我刚开始学习c#.如果和其他的话我最为自在.现在我正在编写一个程序来写一个IP地址,我需要键入正确的子网,以及所有这些.使用if和else if制作代码需要很长时间,所以我想知道是否有更快的方法来实现它.

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)
Run Code Online (Sandbox Code Playgroud)

等等......还有其他数字.是不是有更快更容易的方法使它工作?它有效,但如果我想添加更多数字,那就会出现问题

Cha*_*ock 11

如果你倒退,这些是基于价值的除数 numbers

31 => 2
30 => 4
29 => 8
28 => 16
27 => 32
26 => 64
25 => 128
24 => 256
Run Code Online (Sandbox Code Playgroud)

换句话说,它们是增量数的两倍.

31 => 2^1
30 => 2^2
29 => 2^3
28 => 2^4
27 => 2^5
26 => 2^6
25 => 2^7
24 => 2^8
Run Code Online (Sandbox Code Playgroud)

换句话说,两个减去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)
Run Code Online (Sandbox Code Playgroud)

换一种说法,

var divisor = Math.Pow(2, 32-numbers);
var subnet = 256 - divisor;
Run Code Online (Sandbox Code Playgroud)

低至4行没有switchif.好极了!

Console.WriteLine("correct netID is: 192.168." + randomip + "." + secondip / divisor);
Console.WriteLine("correct subnet is: 255.255.255." + subnet);
Run Code Online (Sandbox Code Playgroud)