我继续为以下代码获取NullPointerException,我已经尝试过并尝试跟踪它,但无济于事。我试图打印出打印出的每个数量的一个collatz猜想,然后给我一个空指针异常错误,我无法找到它。 提前谢谢!
1 (ns collatz.core
2 (:gen-class))
3
4
5 (defn collatz [n]
6 (
7 (println n)
8 (if (= n 1)
9 (println "done")
10 (if (odd? n)
11 (collatz
12 (+(* n 3) 1))
13 (collatz (/ n 2))))))
14 (defn -main [] (collatz 48))
Exception in thread "main" java.lang.NullPointerException, compiling:(/private/var/folders/yh/80f0k44s19lgzck9bgpq746w0000gn/T/form-init1027767069879550093.clj:1:125)
at clojure.lang.Compiler.load(Compiler.java:7391)
at clojure.lang.Compiler.loadFile(Compiler.java:7317)
at clojure.main$load_script.invokeStatic(main.clj:275)
at clojure.main$init_opt.invokeStatic(main.clj:277)
at clojure.main$init_opt.invoke(main.clj:277)
at clojure.main$initialize.invokeStatic(main.clj:308)
at clojure.main$null_opt.invokeStatic(main.clj:342)
at clojure.main$null_opt.invoke(main.clj:339)
at clojure.main$main.invokeStatic(main.clj:421)
at clojure.main$main.doInvoke(main.clj:384)
at clojure.lang.RestFn.invoke(RestFn.java:421)
at clojure.lang.Var.invoke(Var.java:383)
at clojure.lang.AFn.applyToHelper(AFn.java:156)
at clojure.lang.Var.applyTo(Var.java:700)
at clojure.main.main(main.java:37)
Caused by: java.lang.NullPointerException
at collatz.core$collatz.invokeStatic(core.clj:6)
at collatz.core$collatz.invoke(core.clj:5)
at collatz.core$collatz.invokeStatic(core.clj:13)
at collatz.core$collatz.invoke(core.clj:5)
at collatz.core$collatz.invokeStatic(core.clj:13)
at collatz.core$collatz.invoke(core.clj:5)
at collatz.core$collatz.invokeStatic(core.clj:13)
at collatz.core$collatz.invoke(core.clj:5)
at collatz.core$collatz.invokeStatic(core.clj:13)
at collatz.core$collatz.invoke(core.clj:5)
at collatz.core$collatz.invokeStatic(core.clj:11)
at collatz.core$collatz.invoke(core.clj:5)
at collatz.core$collatz.invokeStatic(core.clj:13)
at collatz.core$collatz.invoke(core.clj:5)
at collatz.core$collatz.invokeStatic(core.clj:11)
at collatz.core$collatz.invoke(core.clj:5)
at collatz.core$collatz.invokeStatic(core.clj:13)
at collatz.core$collatz.invoke(core.clj:5)
at collatz.core$collatz.invokeStatic(core.clj:13)
at collatz.core$collatz.invoke(core.clj:5)
at collatz.core$collatz.invokeStatic(core.clj:13)
at collatz.core$collatz.invoke(core.clj:5)
at collatz.core$collatz.invokeStatic(core.clj:13)
at collatz.core$collatz.invoke(core.clj:5)
at collatz.core$_main.invokeStatic(core.clj:14)
at collatz.core$_main.invoke(core.clj:14)
at clojure.lang.Var.invoke(Var.java:375)
at user$eval5.invokeStatic(form-init1027767069879550093.clj:1)
at user$eval5.invoke(form-init1027767069879550093.clj:1)
at clojure.lang.Compiler.eval(Compiler.java:6927)
at clojure.lang.Compiler.eval(Compiler.java:6917)
at clojure.lang.Compiler.load(Compiler.java:7379)
... 14 more
答案 0 :(得分:2)
头部位置(第7行)有<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" android:persistent="true">
<receiver android:name="com.majimechibireminder2.OnBootReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.HOME" />
</intent-filter>
</receiver>
<receiver android:name=".AlarmReceiver"></receiver>
<service android:name=".ChibiReminderService" >
</service>
<activity android:name=".ChibiRemind"></activity>
</application>
,这意味着您尝试调用(println n)
返回的函数值。 (println n)
始终返回println
,因此您获得nil
。
最小的变化是使用NullPointerException
块:
do
虽然坦率地说在Clojure看起来不自然。一种更惯用的编码方式是生成序列而不是打印出元素。
此外,我强烈怀疑你(defn collatz [n]
(do
(println n)
(if (= n 1)
(println "done")
(if (odd? n)
(collatz
(+ (* n 3) 1))
(collatz (/ n 2))))))
没有必要。如果您只需要运行您的功能,请使用REPL。
编辑:正如评论中所指出的,真正最小的变化是删除冗余的parens,因为gen-class
(和defn
)包含隐式{{1} }
fn