Как будто вы пытаетесь получить доступ к объекту, который является null
. Рассмотрим ниже пример:
TypeA objA;
. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException
, что имеет смысл.
См. Также этот пример:
String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
Очевидно, что второе число должно быть равным нулю, так как это код проверяется на 0x08048d27
.
Первое число должно быть выбрано так, чтобы возвращаемое значение func4
также равно нулю ( см. 0x08048d23
). Если вы посмотрите в func4
, вы увидите, что это двоичный поиск ( пояснения для аналогичного кода здесь). Когда элемент найден, он возвращает ноль. В противном случае, если он попадает в нижнюю половину, он возвращает 2*func4()
. Наконец, если он находится в верхней половине, он возвращает 2*func4()+1
.
Учитывая, что в этом случае результат должен быть равен нулю, это означает, что число должно быть найдено, только пересекая нижние диапазоны, так как иначе +1
будет ползти в результат. Ноль сам по себе является тривиальным решением, так как это, безусловно, будет найдено внизу.
Для полноты, это пошаговое руководство для других возможностей. Первая догадка будет средней точкой в диапазоне [0, 14]
, которая равна 7
. Для следующего шага мы знаем, что число должно быть меньше 7
, чтобы получить диапазон [0, 6]
, а это означает середину 3
. Аналогично, следующий диапазон - [0, 2]
с серединой 1
. Наконец, мы приходим к [0, 0]
, тривиальному результату.
TL; DR: Возможными входами являются 0 0
, 1 0
, 3 0
и 7 0
.
Так как есть версии этого с другими ожидаемыми результатами, вот еще одна дополнительная помощь: Возвращаемое значение на самом деле говорит о низкоуровневых вариантах в двоичном формате, начиная с младшего значащего бита. В приведенном выше примере у нас были все 0
биты, поэтому все низкие варианты. Предположим, что мы имеем результат 4
, который является 100
в двоичном. Чтение справа означает, что нам нужна нижняя, другая нижняя и конечная верхняя рекурсия. Следуя через диапазоны, они отображаются в [0, 6]
, [0, 2]
и [2, 2]
. Таким образом, в этом случае 2
будет решением.