java – Clojure GUI计算器. “ – ”始终返回0,“/”始终返回1
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – Clojure GUI计算器. “ – ”始终返回0,“/”始终返回1,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2024字,纯文字阅读大概需要3分钟。
内容图文
![java – Clojure GUI计算器. “ – ”始终返回0,“/”始终返回1](/upload/InfoBanner/zyjiaocheng/754/16329dbf115b48e5acba89f726fdff0c.jpg)
我很清楚这段代码太可怕了.我刚刚做到了所以我可以尝试不同的Swing东西.这是一个有趣的问题.这创建了4个按钮,用于添加,减去,分割和相乘.乘法和加法完美地工作,完全没有问题,但是当用户试图减去它时总是返回0.当用户试图除以它时,总是返回1或1.0,具体取决于输入.我无法弄清楚.这是代码:
(ns rayne.main
(:gen-class)
(:import (javax.swing JFrame JTextField JButton JOptionPane)
(java.awt.event ActionListener)
(java.awt GridLayout)))
(def numbers (ref []))
(def times-clicked (ref 0))
(defn calc [nseq op]
(let [n1 (first nseq)
n2 (last nseq)]
(cond
(= op "+") (+ n1 n2)
(= op "*") (* n1 n2)
(= op "-") (- n2 n1)
(= op "/") (/ n1 n2))))
(defn add-op-button [op text button]
(.addActionListener button
(proxy [ActionListener] []
(actionPerformed [e]
(dosync
(ref-set times-clicked (inc @times-clicked))
(if (= @times-clicked 2)
(do
(let [result (.toString (calc @numbers op))
result2 (read-string result)]
(.setText text result)
(ref-set numbers [])
(ref-set times-clicked 0)))
(do
(ref-set numbers (conj @numbers (read-string (.getText text))))
(.setText text ""))))))))
(defn -main []
(let [frame (JFrame. "Calculator")
add-button (JButton. "+")
sub-button (JButton. "-")
mul-button (JButton. "*")
div-button (JButton. "/")
clr-button (JButton. "Clear")
text-field (JTextField.)]
(add-op-button "+" text-field add-button)
(add-op-button "-" text-field sub-button)
(add-op-button "*" text-field mul-button)
(add-op-button "/" text-field div-button)
(doto frame
(.setLayout (GridLayout. 1 5))
(.add text-field)
(.add add-button)
(.add sub-button)
(.add mul-button)
(.add div-button)
(.setSize 500 100)
(.setVisible true))))
由于复制粘贴和动态格式化,缩进可能搞砸了,但它确实存在.我再一次知道代码太可怕了.
解决方法:
用户第二次单击按钮时,该数字不会添加到列表编号中,因此您在一个元素的列表上进行计算.
由于列表只有一个元素,因此第一个元素(n1)和最后一个元素(n2)是相同的,并且
x / x => 1
x - x => 0
我很惊讶你的加法和乘法工作……: – /
我想你可以通过将@numbers的更新移到if之前来解决这个问题:
(ref-set numbers (conj @numbers (read-string (.getText text))))
(if (= @times-clicked 2)
或者将@次点击的增量移动到if之后.
内容总结
以上是互联网集市为您收集整理的java – Clojure GUI计算器. “ – ”始终返回0,“/”始终返回1全部内容,希望文章能够帮你解决java – Clojure GUI计算器. “ – ”始终返回0,“/”始终返回1所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。