首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Clojure Collatz猜测NullPointerException

Clojure Collatz猜测NullPointerException
EN

Stack Overflow用户
提问于 2016-09-25 12:20:35
回答 1查看 116关注 0票数 1

我一直在获取以下代码的NullPointerException,并且我尝试了一次又一次地跟踪它,但都无济于事。我试图打印出collatz猜想的每个数字,然后它打印出来,然后给我一个空指针异常错误,我找不到它。提前感谢!

代码语言:javascript
复制
      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
EN

回答 1

Stack Overflow用户

发布于 2016-09-25 12:48:19

头部位置有(println n) (第7行),这意味着您试图调用由(println n)返回的函数值。println总是返回nil,所以你会得到NullPointerException

最小的更改是使用do块:

代码语言:javascript
复制
(defn collatz [n]
   (do
     (println n)
     (if (= n 1)
       (println "done")
       (if (odd? n)
         (collatz
          (+ (* n 3) 1))
         (collatz (/ n 2))))))

尽管坦率地说,这在Clojure中看起来很不自然。一种更惯用的编码方式是生成一个序列,而不是打印出元素。

此外,我强烈怀疑您不需要使用gen-class。如果你只需要运行你的函数,使用REPL。

编辑:正如评论中指出的,真正最小的改变是删除多余的括号,因为defn (和fn)包含隐式do

代码语言:javascript
复制
(def collatz [n]
  (println n)
  (if (= n 1)
    (println "done")
    (if (odd? n)
      (collatz
       (+ (* n 3) 1))
      (collatz (/ n 2)))))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39683334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档