gpt4 book ai didi

java - Clojure GUI 计算器。 "-"总是返回 0 而 "/"总是返回 1

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:52:07 25 4
gpt4 key购买 nike

我很清楚这段代码很糟糕。我刚刚做到了,所以我可以尝试不同的 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))))

由于复制粘贴和动态格式化,缩进可能搞砸了,但确实如此。我又一次知道代码很糟糕。

最佳答案

用户第二次单击按钮时,数字不会添加到列表 numbers 中,因此您正在对一个元素的列表执行 calc

由于列表只有一个元素,第一个元素(n1)和最后一个元素(n2)是一回事,并且

x / x => 1
x - x => 0

我很惊讶你的加法和乘法是有效的...:-/

我认为您可以通过将 @numbers 的更新移动到 if 之前来解决此问题:

(ref-set numbers (conj @numbers (read-string (.getText text))))
(if (= @times-clicked 2)

或者将 @times-clickedincrement 移动到 if 之后。

关于java - Clojure GUI 计算器。 "-"总是返回 0 而 "/"总是返回 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/652617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com