Je suis bien conscient que ce code est horrible. Je l'ai juste fait pour que je puisse essayer différentes choses Swing. C'est un problème intéressant. Cela crée 4 boutons pour ajouter, soustraire, diviser et multiplier. La multiplication et l'ajout fonctionnent parfaitement, aucun problème du tout, mais lorsque l'utilisateur tente de le soustraire, il renvoie toujours 0. Lorsque l'utilisateur essaie de le diviser, il renvoie toujours 1 ou 1.0 en fonction de l'entrée. Je ne peux pas comprendre. Voici le code:Calculatrice Clojure GUI. "-" renvoie toujours 0 et "/" renvoie toujours 1
(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))))
L'indentation est probablement foiré, en raison de copier-coller et la mise en forme de mouche, mais il est. Encore une fois, je sais que le code est horrible.
Oh merde! Je ne sais même pas comment l'addition et la multiplication fonctionnaient en premier lieu !! Merci beaucoup! – Rayne
Aussi dans le cas où vous vous demandiez clr-bouton est un cas particulier que je n'ai pas encore ajouté. – Rayne
C'est bon. Honnêtement, je suis étonné je me souviens assez de zézaiement pour même rien comprendre! ;] –