Ваша задача - создать исключение с нулевым указателем. То есть ваша программа должна принять значение, которое, как ожидается, будет ненулевым, и выдать исключение / ошибку или сбой, потому что значение равно нулю.
Кроме того, при чтении кода не может быть очевидным, что значение равно нулю. Ваша цель - показать читателю, что значение не равно нулю, хотя оно и есть на самом деле.
- Вместо нуля вы можете использовать ноль, ни один, ничего, или любой другой эквивалент в вашем языке. Вы также можете использовать неопределенные, неинициализированные и так далее.
- Проблема с вашим кодом должна заключаться в том, что переменная (удивительно) равна нулю, когда программа ожидает ненулевую переменную.
- Ваша программа может реагировать на нулевое значение, выдавая исключение, выбрасывая ошибку, сбой или все, что она обычно делает, когда встречается неожиданное нулевое значение.
Это конкурс популярности, так что будьте умнее!
Ответы:
Джава
Давайте вычислим абсолютное значение числа. В Java есть Math.abs для этой цели, однако иногда используемое число может быть нулевым. Таким образом, нам нужен вспомогательный метод для решения этого случая:
Если x равен нулю, вернуть ноль, иначе используйте Math.abs ().
Код очень прост и понятен, и должен нормально работать ... верно?
Кстати, используя эту строку вместо:
работает правильно. Я думал о том, чтобы сделать этот спойлер, но .. я думаю, что это так же озадачивает :)
Хорошо, объяснение:
источник
С
Каждый программист C сделал эту ошибку, по крайней мере, один раз.
Причина:
Fix:
http://ideone.com/MbQhMM
источник
scanf
является переменной функцией, и аргумент неверного типа (int
) был задан, когда ожидалосьint *
. Поскольку C (я знаю, компиляторы могут обнаружить это в случаеscanf
) не может проверять типы в функции с переменным числом, это успешно компилируется.0
действительно является литералом нулевого указателя, но это относится только к непосредственно используемому литералу, не сохраняя его в переменной.n
никогда не содержал нулевого указателя.PHP
Этот укусил меня несколько раз.
Ожидаемый результат:
Фактический результат:
иначе NullPointerException
Причина:
источник
CoffeeScript (на Node.js)
В CoffeeScript
?
есть экзистенциальный оператор. Если переменная существует, она используется, в противном случае используется правая часть. Мы все знаем, что трудно писать переносимые программы. Например, печать в JavaScript указана ниже. Браузеры используютalert
(илиdocument.write
), SpiderMonkey Оболочка используетprint
и Node.js использованияconsole.log
. Это безумие, но CoffeeScript помогает с этой проблемой.Давайте запустим это под Node.js. В конце концов, мы хотим убедиться, что наш скрипт работает.
Хм, с чего бы вы жаловались на это, когда
alert
тоже не определено?источник
Рубин
Найдите awk в ПУТИ клона Unix.
К сожалению!
Из ошибки мы знаем, что
p.find
называетсяnil.find
, так иp
должно бытьnil
. Как это случилось?В рубине
def
имеет собственную область видимости для локальных переменных и никогда не берет локальные переменные из внешней области видимости. Таким образом, назначениеp = ENV['PATH'].split ':'
не входит в сферу применения.Обычно возникает неопределенная переменная
NameError
, ноp
это особый случай. У Ruby есть глобальный метод с именемp
. Такp.find { ... }
становится вызов метода, вродеp().find { ... }
. Когдаp
не имеет аргументов, он возвращаетnil
. (Код для игры в гольф используетсяp
как ярлык дляnil
.) Тогдаnil.find { ... }
поднимаетсяNoMethodError
.Я исправляю это, переписывая программу на Python.
Оно работает!
Я, вероятно, хочу, чтобы это распечатать
awk is /usr/bin/awk
, но это другая ошибка.источник
C #
With()
является методом расширенияstring
объекта, который по сути является просто псевдонимом дляstring.Format()
.Выглядит хорошо, правда? Неправильно.
Большинство людей, которые немного разбираются во внутренней специфике языка, вероятно, смогут довольно быстро обнаружить проблему, но это все же легко пропустить с первого взгляда.
источник
.GetType()
иtypeof()
и , таким образом , что приводит к неисправности , если результат не то же самое. Я думаю, что постер хотел пуленепробиваемый код, который не является.return string.Format(format, args);
. Если бы понадобилось отражение (в другом случае использования), он использовал быtypeof(string)
(ловит ошибки в регистре во время компиляции, без магической строки), а не статическийGetType
метод. Так что пример кажется "нереальным".Unity3D
Тогда вы забудете перетащить ресурс туда и BOOM, Unity взрывается. Бывает все время.
источник
Рубин
Просто некоторый простой код, чтобы взять продукт массива.
источник
for (int i = 0; i <= arr.length; i++)
в Java.Android
Я вижу, что это происходит слишком часто. Человек передает сообщение следующему действию (может быть, код состояния, данные карты и т. Д.) И в конечном итоге получает нулевое значение из
Intent
.На первый взгляд это кажется довольно разумным. Только:
В
MenuActivity.java
:В
NextActivity.java
:FWIW, то JavaDoc делает сказать , что
Intent.getStringExtra(String)
может вернутьсяnull
, но только если тег не был найден. Очевидно, я использую тот же тег, так что это должно быть что-то еще ...источник
С
Просто быстрое чтение из буфера, где программист даже был достаточно любезен, чтобы задокументировать потенциальную опасность!
источник
Нимрод
источник
C #
Это классика. Очень полезный метод
FindStringRepresentationOf
создаст новый экземпляр указанного параметра типа, а затем найти строковое представление этого экземпляра.Конечно, будет бесполезно проверять
null
сразу после создания нового экземпляра, поэтому я этого не сделал ...После исправления проблемы, как описано в невидимом тексте выше, также попробуйте
goodInstance.GetType()
(разница в том, чтоGetType()
, в отличие от этогоToString()
, не является виртуальной, поэтому они не моглиoverride
ее в типеNullable<>
).источник
C ++:
То, что вы ожидаете, это "Hello World!" быть напечатанным. Но вы увидите только мусор на экране.
Здесь a1 уничтожается, когда заканчивается init (). Таким образом, a_ptr, поскольку он указывает на a1, будет производить мусор.
источник
С
объяснение
источник