IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Kalkulačka - desetinná místa

V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Matěj Přerovský:29.9.2019 14:05

Ahoj,
poradíte mi prosím někdo s tímto problémem? :
Mám kalkulačku v Javě Swing, která sice funguje, ale ještě neumí, aby se ve výsledku zobrazilo tolik des. míst, kolik je potřeba.

Zde je můj kód:

package Calc;

import java.awt.EventQueue;
import javax.swing.UIManager.*;

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.Font;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.SwingConstants;
import java.awt.Color;
import javax.swing.UIManager;
import java.awt.Toolkit;
import java.awt.Window.Type;

public class Calculator {

        private JFrame frmKalkulaka;
        private JTextField txtDisplay;

        double firstNum;
        double secondNum;
        double result;
        String operations;
        String answer;
        /**
         * Launch the application.
         */
        public static void main(String[] args) {
                EventQueue.invokeLater(new Runnable() {
                        public void run() {
                                try {
                                        Calculator window = new Calculator();
                                        window.frmKalkulaka.setVisible(true);
                                } catch (Exception e) {
                                        e.printStackTrace();
                                }
                        }
                });
        }

        /**
         * Create the application.
         */
        public Calculator() {
                initialize();

                try {
                    for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
                        if ("Nimbus".equals(info.getName())) {
                            UIManager.setLookAndFeel(info.getClassName());
                            break;
                        }
                    }
                } catch (Exception e) {
                    // If Nimbus is not available, you can set the GUI to another look and feel.
                }

        }

        /**
         * Initialize the contents of the frame.
         */
        private void initialize() {
                frmKalkulaka = new JFrame();
                frmKalkulaka.getContentPane().setBackground(Color.BLACK);
                frmKalkulaka.setIconImage(Toolkit.getDefaultToolkit().getImage(Calculator.class.getResource("/Images/icon.png")));
                frmKalkulaka.setTitle("Kalkulačka");
                frmKalkulaka.getContentPane().setFont(new Font("Dialog", Font.BOLD, 12));
                frmKalkulaka.setBounds(100, 100, 268, 436);
                frmKalkulaka.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frmKalkulaka.getContentPane().setLayout(null);

                txtDisplay = new JTextField();
                txtDisplay.setForeground(Color.WHITE);
                txtDisplay.setEditable(false);
                txtDisplay.setBackground(Color.BLACK);
                txtDisplay.setHorizontalAlignment(SwingConstants.RIGHT);
                txtDisplay.setFont(new Font("Dialog", Font.BOLD, 34));
                txtDisplay.setBounds(12, 12, 238, 72);
                frmKalkulaka.getContentPane().add(txtDisplay);
                txtDisplay.setColumns(10);

                JButton btn7 = new JButton("7");
                btn7.setForeground(new Color(255, 255, 255));
                btn7.setBackground(new Color(51, 0, 0));
                btn7.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent arg0) {
                                String EnterNumber = txtDisplay.getText() + btn7.getText();
                                txtDisplay.setText(EnterNumber);
                        }
                });
                btn7.setFont(new Font("Dialog", Font.BOLD, 19));
                btn7.setBounds(12, 158, 50, 50);
                frmKalkulaka.getContentPane().add(btn7);

                JButton btn8 = new JButton("8");
                btn8.setForeground(new Color(255, 255, 255));
                btn8.setBackground(new Color(51, 0, 0));
                btn8.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent arg0) {
                                String EnterNumber = txtDisplay.getText() + btn8.getText();
                                txtDisplay.setText(EnterNumber);
                        }
                });
                btn8.setFont(new Font("Dialog", Font.BOLD, 19));
                btn8.setBounds(74, 158, 50, 50);
                frmKalkulaka.getContentPane().add(btn8);

                JButton btn9 = new JButton("9");
                btn9.setForeground(new Color(255, 255, 255));
                btn9.setBackground(new Color(51, 0, 0));
                btn9.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent arg0) {
                                String EnterNumber = txtDisplay.getText() + btn9.getText();
                                txtDisplay.setText(EnterNumber);
                        }
                });
                btn9.setFont(new Font("Dialog", Font.BOLD, 19));
                btn9.setBounds(136, 158, 50, 50);
                frmKalkulaka.getContentPane().add(btn9);

                JButton btn4 = new JButton("4");
                btn4.setForeground(new Color(255, 255, 255));
                btn4.setBackground(new Color(51, 0, 0));
                btn4.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent arg0) {
                                String EnterNumber = txtDisplay.getText() + btn4.getText();
                                txtDisplay.setText(EnterNumber);
                        }
                });
                btn4.setFont(new Font("Dialog", Font.BOLD, 19));
                btn4.setBounds(12, 220, 50, 50);
                frmKalkulaka.getContentPane().add(btn4);

                JButton btn6 = new JButton("6");
                btn6.setForeground(new Color(255, 255, 255));
                btn6.setBackground(new Color(51, 0, 0));
                btn6.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent arg0) {
                                String EnterNumber = txtDisplay.getText() + btn6.getText();
                                txtDisplay.setText(EnterNumber);
                        }
                });
                btn6.setFont(new Font("Dialog", Font.BOLD, 19));
                btn6.setBounds(136, 220, 50, 50);
                frmKalkulaka.getContentPane().add(btn6);

                JButton btn5 = new JButton("5");
                btn5.setForeground(new Color(255, 255, 255));
                btn5.setBackground(new Color(51, 0, 0));
                btn5.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent arg0) {
                                String EnterNumber = txtDisplay.getText() + btn5.getText();
                                txtDisplay.setText(EnterNumber);
                        }
                });
                btn5.setFont(new Font("Dialog", Font.BOLD, 19));
                btn5.setBounds(74, 220, 50, 50);
                frmKalkulaka.getContentPane().add(btn5);

                JButton btn1 = new JButton("1");
                btn1.setForeground(new Color(255, 255, 255));
                btn1.setBackground(new Color(51, 0, 0));
                btn1.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent arg0) {
                                String EnterNumber = txtDisplay.getText() + btn1.getText();
                                txtDisplay.setText(EnterNumber);
                        }
                });
                btn1.setFont(new Font("Dialog", Font.BOLD, 19));
                btn1.setBounds(12, 282, 50, 50);
                frmKalkulaka.getContentPane().add(btn1);

                JButton btn3 = new JButton("3");
                btn3.setForeground(new Color(255, 255, 255));
                btn3.setBackground(new Color(51, 0, 0));
                btn3.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent arg0) {
                                String EnterNumber = txtDisplay.getText() + btn3.getText();
                                txtDisplay.setText(EnterNumber);
                        }
                });
                btn3.setFont(new Font("Dialog", Font.BOLD, 19));
                btn3.setBounds(136, 282, 50, 50);
                frmKalkulaka.getContentPane().add(btn3);

                JButton btn2 = new JButton("2");
                btn2.setForeground(new Color(255, 255, 255));
                btn2.setBackground(new Color(51, 0, 0));
                btn2.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent arg0) {
                                String EnterNumber = txtDisplay.getText() + btn2.getText();
                                txtDisplay.setText(EnterNumber);
                        }
                });
                btn2.setFont(new Font("Dialog", Font.BOLD, 19));
                btn2.setBounds(74, 282, 50, 50);
                frmKalkulaka.getContentPane().add(btn2);

                JButton btnPlus = new JButton("+");
                btnPlus.setBackground(new Color(204, 255, 204));
                btnPlus.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent arg0) {
                                firstNum = Double.parseDouble(txtDisplay.getText());
                                txtDisplay.setText("");
                                operations = "+";
                        }
                });
                btnPlus.setFont(new Font("Dialog", Font.BOLD, 19));
                btnPlus.setBounds(198, 96, 50, 50);
                frmKalkulaka.getContentPane().add(btnPlus);

                JButton btnMinus = new JButton("-");
                btnMinus.setBackground(new Color(204, 255, 204));
                btnMinus.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent arg0) {
                                firstNum = Double.parseDouble(txtDisplay.getText());
                                txtDisplay.setText("");
                                operations = "-";
                        }
                });
                btnMinus.setFont(new Font("Dialog", Font.BOLD, 19));
                btnMinus.setBounds(198, 158, 50, 50);
                frmKalkulaka.getContentPane().add(btnMinus);

                JButton btnMult = new JButton("*");
                btnMult.setBackground(new Color(204, 255, 204));
                btnMult.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent arg0) {
                                firstNum = Double.parseDouble(txtDisplay.getText());
                                txtDisplay.setText("");
                                operations = "*";
                        }
                });
                btnMult.setFont(new Font("Dialog", Font.BOLD, 19));
                btnMult.setBounds(198, 220, 50, 50);
                frmKalkulaka.getContentPane().add(btnMult);

                JButton btn0 = new JButton("0");
                btn0.setForeground(new Color(255, 255, 255));
                btn0.setBackground(new Color(51, 0, 0));
                btn0.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent arg0) {
                                String EnterNumber = txtDisplay.getText() + btn0.getText();
                                txtDisplay.setText(EnterNumber);
                        }
                });
                btn0.setFont(new Font("Dialog", Font.BOLD, 19));
                btn0.setBounds(12, 345, 50, 50);
                frmKalkulaka.getContentPane().add(btn0);

                JButton btnDiv = new JButton("/");
                btnDiv.setBackground(new Color(204, 255, 204));
                btnDiv.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent arg0) {
                                firstNum = Double.parseDouble(txtDisplay.getText());
                                txtDisplay.setText("");
                                operations = "/";
                        }
                });
                btnDiv.setFont(new Font("Dialog", Font.BOLD, 19));
                btnDiv.setBounds(198, 282, 50, 50);
                frmKalkulaka.getContentPane().add(btnDiv);

                JButton btnPM = new JButton("\u00B1");
                btnPM.setBackground(new Color(255, 255, 204));
                btnPM.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent arg0) {
                                double ops = Double.parseDouble(String.valueOf(txtDisplay.getText()));
                                ops = ops * (-1);
                                txtDisplay.setText(String.valueOf(ops));
                        }
                });
                btnPM.setFont(new Font("Dialog", Font.BOLD, 19));
                btnPM.setBounds(136, 345, 50, 50);
                frmKalkulaka.getContentPane().add(btnPM);

                JButton btnDot = new JButton(".");
                btnDot.setBackground(new Color(255, 255, 204));
                btnDot.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent arg0) {
                                if(! txtDisplay.getText().contains("."))
                          {
                          txtDisplay.setText(txtDisplay.getText() + btnDot.getText());
                          }

                        }
                });
                btnDot.setFont(new Font("Dialog", Font.BOLD, 19));
                btnDot.setBounds(74, 345, 50, 50);
                frmKalkulaka.getContentPane().add(btnDot);

                JButton btnEqual = new JButton("=");
                btnEqual.setBackground(new Color(204, 204, 255));
                btnEqual.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent arg0) {
                                String answer;

                                secondNum = Double.parseDouble(txtDisplay.getText());

                                if(operations == "+") {
                                        result = firstNum + secondNum;
                                        answer = String.format("%.2f", result);
                                        txtDisplay.setText(answer);



                                }

                                else if(operations == "-") {
                                        result = firstNum - secondNum;
                                        answer = String.format("%.2f", result);
                                        txtDisplay.setText(answer);


                                }

                                else if(operations == "*") {
                                        result = firstNum * secondNum;
                                        answer = String.format("%.2f", result);
                                        txtDisplay.setText(answer);


                                }

                                else if(operations == "/") {
                                        if(secondNum != 0) {
                                        result = firstNum / secondNum;
                                        answer = String.format("%.2f", result);
                                        }
                                        else {
                                                String message = "Nulou dělit nelze!";
                                                    JOptionPane.showMessageDialog(new JFrame(), message, "Chyba",
                                                        JOptionPane.ERROR_MESSAGE);
                                                    answer = "Error";
                                        }
                                        txtDisplay.setText(answer);

                                }

                                else if(operations == "%") {
                                        result = firstNum % secondNum;
                                        answer = String.format("%.2f", result);
                                        txtDisplay.setText(answer);



                                }

                        }
                });
                btnEqual.setFont(new Font("Dialog", Font.BOLD, 19));
                btnEqual.setBounds(198, 345, 50, 50);
                frmKalkulaka.getContentPane().add(btnEqual);

                JButton btnC = new JButton("C");
                btnC.setBackground(new Color(255, 255, 204));
                btnC.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent arg0) {
                                txtDisplay.setText(null);
                        }
                });
                btnC.setFont(new Font("Dialog", Font.BOLD, 19));
                btnC.setBounds(74, 96, 50, 50);
                frmKalkulaka.getContentPane().add(btnC);

                JButton btnModulo = new JButton("%");
                btnModulo.setBackground(new Color(204, 255, 204));
                btnModulo.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent arg0) {
                                firstNum = Double.parseDouble(txtDisplay.getText());
                                txtDisplay.setText("");
                                operations = "%";
                        }
                });
                btnModulo.setFont(new Font("Dialog", Font.BOLD, 16));
                btnModulo.setBounds(136, 96, 50, 50);
                frmKalkulaka.getContentPane().add(btnModulo);

                JButton btnBackSpace = new JButton("\u27F5");
                btnBackSpace.setBackground(new Color(255, 255, 204));
                btnBackSpace.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent arg0) {
                                String backSpace=null;

                                if(txtDisplay.getText().length()>0) {
                                        StringBuilder strB = new StringBuilder(txtDisplay.getText());


                                        strB.deleteCharAt(txtDisplay.getText().length()-1);
                                        backSpace = strB.toString();
                                        txtDisplay.setText(backSpace);

                                }
                        }
                });
                btnBackSpace.setFont(new Font("Dialog", Font.BOLD, 11));
                btnBackSpace.setBounds(12, 96, 50, 50);
                frmKalkulaka.getContentPane().add(btnBackSpace);
        }
}

Děkuji za odpovědi a omlouvám se za nepřehledný kód :-)
Díky, M

Odpovědět
29.9.2019 14:05
42
Avatar
Lubor Pešek
Člen
Avatar
Lubor Pešek:29.9.2019 16:20

Máš tam totiž na pevno zadané, že chceš vždy výsledek vyjádřit na dvě desetinná místa.

...
answer = String.format("%.2f", result);
...

Změň to na

answer = String.format("%f", result);

A máš to na defaultní velikost desetinných míst.

Editováno 29.9.2019 16:20
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
29.9.2019 16:20
Existují dva způsoby, jak vyřešit problém. Za prvé vyhoďte počítač z okna. Za druhé vyhoďte okna z počítače.
Avatar
Lubor Pešek
Člen
Avatar
Lubor Pešek:29.9.2019 16:25

Jinak za kód se nestyď. Jestli jsi začátečník, tak podle toho musí i ten kód vypadat. Tomu se říká vlastní vývoj. Dokonči to a nemaž to. Buď samotný kód postupně opravuj (máš tam samozřejmě spoustu věcí neošetřených) a nebo na něm implementuj nové poznatky (kupříkladu ta tlačítka... Dělat jich 1000, tak ti jebne:) Takže na tom si krásně jednou zkus práci s kolekcí, cyklem atd.)

Nicméně jak říkám, rozhodně se nestyď za to, že začínáš. A můj osobní názor je, že začínáš s velmi kvalitním jazykem;).
Když toto předvedeš ve firmě nebo za rok, tak za to se už styď, ale tvůj ticket je po dlouhé době takový, na kterém se dá říct, čím se můžeš zaobírat, až ti aplikace bude fungovat.

Každý jsme takto začínali:) Když jsem viděl nedávno své první kódy, nevěřil jsem, že jsem takové kraviny někdy dokázal napsat:D:D:D:D

Jestli chceš, napiš mi přes portál potom maila a řeknu ti, co a jak bys mohl vylepšovat a co bys měl dál studovat;) Snad se ozve i víc lidí, kteří ti nabídnou to samé a budeš si moct vybrat:)

Editováno 29.9.2019 16:26
Nahoru Odpovědět
29.9.2019 16:25
Existují dva způsoby, jak vyřešit problém. Za prvé vyhoďte počítač z okna. Za druhé vyhoďte okna z počítače.
Avatar
Matěj Přerovský:29.9.2019 20:45

Díky moc :D

Nahoru Odpovědět
29.9.2019 20:45
42
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.