Как будто вы пытаетесь получить доступ к объекту, который является null
. Рассмотрим ниже пример:
TypeA objA;
. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException
, что имеет смысл.
См. Также этот пример:
String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
Вы знаете, что можно легко преобразовать адреса IPv4 в международные числа (int32 числа), не так ли? Работа с международными числами намного легче. Таким образом, в основном каждый адрес является числом в диапазоне 0 к 2^32. Каждый диапазон имеет число запуска и число конца. Ваш пример
1.1.1.1 to 2.2.2.5
1.1.1.2 to 2.2.2.4
может быть записан как
16,843,009 to 33,686,021
16,843,010 to 33,686,020
, Таким образом, довольно легко видеть, ли один диапазон в другом диапазоне. Диапазон полностью в другом диапазоне, если следующее условие дано
startIP2 >= startIP1 && startIP2 <= endIP1 &&
endIP1 >= startIP1 && endIP2 <= endIP1
В этом случае, диапазон startIP2-endIP2 полностью в startIP1-endIP1. Если только первая строка верна, то startIP2 в диапазоне startIP1-endIP1, но конец вне диапазона. Если только вторая строка верна, endIP в диапазоне, но IP запуска вне диапазона. В этом случае, если только одна строка верна, необходимо развернуть диапазон вначале или в конце. Если обе строки являются ложью, диапазоны являются абсолютно непересекающимися, в этом случае они - два абсолютно независимых диапазона.
Это - объединение вычисления сегментов. Оптимальный алгоритм (в O (nlog (n))) состоит в выполнении следующего:
В конце, Вы получаете отсортированный список непересекающихся надмножеств. Однако, два надмножества A и B могут быть смежными (конечная точка A незадолго до начальной точки B). Если Вы хотите, чтобы A и B были объединены, можно сделать это или простым шагом постобработки, или путем небольшого изменения шага 3: когда РЕ LE достигает нуля, Вы считали бы это концом надмножества, только если следующий элемент в L не является прямым преемником Вашего элемента тока.
То, что необходимо сделать, просто проверить диапазоны на перекрытие. Если два диапазона накладываются, то они объединяются в единственный диапазон. Диапазоны накладываются, если правая сторона одного диапазона больше, чем левая сторона другого.
Хорошо, мой коллега придумал этот ответ, который я думаю, довольно превосходно. Сообщите мне, видите ли Вы какие-либо проблемы: