Есть ли другой способ написать это, если код? - PullRequest
0 голосов
/ 05 сентября 2018

Я только начал изучать 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)

и так далее ... с другими номерами. Нет ли более быстрого и простого способа заставить его работать? Это работает, но если я хочу добавить больше номеров, будет проблема

1 Ответ

0 голосов
/ 05 сентября 2018

Если вы думаете задом наперед, это ваши делители на основе значения 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

Другими словами, два в степени 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...