kalkulator Walut

0

Witajcie, mam na zajęcia napisać kalkulator walut. Kurs Euro, Funta i Franka musi być wpisywany ręcznie w okienkach.
Problem w tym, że podczas obliczania nie bierze pod uwagę wpisanych kursów tylko dzieli przez 0 i wyskakuje błąd.
Dodam że jestem początkujący w Javie.
Kod:

package kalkulatorwalut;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.KeyStroke;

public class KalkulatorWalut extends JFrame implements ActionListener {

    JLabel etyEuro = new JLabel("Euro:  ");
    JTextField Euro1 = new JTextField("0", 10);

    JLabel etyFunt = new JLabel("Funt:  ");
    JTextField Funt1 = new JTextField("0", 10);

    JLabel etyFrank = new JLabel("Frank:  ");
    JTextField Frank1 = new JTextField("0", 10);

    JLabel etyZloty = new JLabel("Złoty:  ");
    JTextField Zloty1 = new JTextField("0", 10);

    JLabel etyZloty2 = new JLabel("Złoty:  ");
    JTextField Zloty2 = new JTextField("0", 10);
    

    JLabel etyZloty3 = new JLabel("Złoty:  ");
    JTextField Zloty3 = new JTextField("0", 10);

    JLabel etyZloty4 = new JLabel("Złoty:  ");
    JTextField Zloty4 = new JTextField("0", 10);

    JLabel etyEuro2 = new JLabel("EUR:  ");
    JTextField Euro2 = new JTextField("0", 5);

    JLabel etyFunt2 = new JLabel("GBP:  ");
    JTextField Funt2 = new JTextField("0", 5);

    JLabel etyFrank2 = new JLabel("CHF:  ");
    JTextField Frank2 = new JTextField("0", 5);

    long kursEuro;
    long kursFunta;
    long kursFranka;
    long euroNaZloty;
    long funtNaZloty;
    long frankNaZloty;
    long zlotyNaEuro;
    long zlotyNaFunt;
    long zlotyNaFrank;

    public KalkulatorWalut() {

        setTitle("Kalkulator Walut");

        Toolkit zestaw = Toolkit.getDefaultToolkit();
        Dimension rozmiarEkranu = zestaw.getScreenSize();
        int szerEkranu = rozmiarEkranu.width;
        int wysEkranu = rozmiarEkranu.height;
        setBounds(szerEkranu / 4, wysEkranu / 4, szerEkranu / 2, wysEkranu / 2);

        setResizable(false);

        setLayout(new BorderLayout());

        JMenuBar pasekMenu = new JMenuBar();
        JMenu mEdycja = new JMenu("Edycja");
        JMenu mPomoc = new JMenu("Pomoc");

        pasekMenu.add(mEdycja);
        pasekMenu.add(mPomoc);

        JMenuItem kursEuro = new JMenuItem("Kurs Euro");
        kursEuro.setActionCommand("11");
        kursEuro.addActionListener(this);

        JMenuItem kursFunta = new JMenuItem("Kurs Funta");
        kursFunta.setActionCommand("12");
        kursFunta.addActionListener(this);

        JMenuItem kursFranka = new JMenuItem("Kurs Franka");
        kursFranka.setActionCommand("13");
        kursFranka.addActionListener(this);

        JMenuItem zakoncz = new JMenuItem("Zakoncz");
        zakoncz.setAccelerator(KeyStroke.getKeyStroke("ctrl K"));
        zakoncz.setActionCommand("14");
        zakoncz.addActionListener(this);

        JMenuItem autor = new JMenuItem("O Autorze");
        autor.setActionCommand("21");
        autor.addActionListener(this);

        mEdycja.add(kursEuro);
        mEdycja.add(kursFunta);
        mEdycja.add(kursFranka);
        mEdycja.addSeparator();
        mEdycja.add(zakoncz);

        mPomoc.add(autor);

        setJMenuBar(pasekMenu);

        mPomoc.setMnemonic('P');
        mEdycja.setMnemonic('E');

        JPanel lewyPanel = new JPanel(new GridLayout(4, 1));
        JPanel euroPanel = new JPanel(new FlowLayout());
        JPanel funtPanel = new JPanel(new FlowLayout());
        JPanel frankPanel = new JPanel(new FlowLayout());
        JPanel zlotyPanel = new JPanel(new FlowLayout());

        euroPanel.add(etyEuro);
        euroPanel.add(Euro1);

        funtPanel.add(etyFunt);
        funtPanel.add(Funt1);

        frankPanel.add(etyFrank);
        frankPanel.add(Frank1);

        zlotyPanel.add(etyZloty);
        zlotyPanel.add(Zloty1);

        lewyPanel.add(euroPanel);
        lewyPanel.add(funtPanel);
        lewyPanel.add(frankPanel);
        lewyPanel.add(zlotyPanel);

        add(lewyPanel, BorderLayout.WEST);

        JPanel prawyPanel = new JPanel(new GridLayout(4, 1));
        JPanel zloty2Panel = new JPanel(new FlowLayout());
        JPanel zloty3Panel = new JPanel(new FlowLayout());
        JPanel zloty4Panel = new JPanel(new FlowLayout());
        JPanel walutyPanel = new JPanel(new FlowLayout());

        zloty2Panel.add(etyZloty2);
        zloty2Panel.add(Zloty2);

        zloty3Panel.add(etyZloty3);
        zloty3Panel.add(Zloty3);

        zloty4Panel.add(etyZloty4);
        zloty4Panel.add(Zloty4);

        walutyPanel.add(etyEuro2);
        walutyPanel.add(Euro2);
        walutyPanel.add(etyFunt2);
        walutyPanel.add(Funt2);
        walutyPanel.add(etyFrank2);
        walutyPanel.add(Frank2);

        prawyPanel.add(zloty2Panel);
        prawyPanel.add(zloty3Panel);
        prawyPanel.add(zloty4Panel);
        prawyPanel.add(walutyPanel);

        add(prawyPanel, BorderLayout.CENTER);

        JPanel panelPrzyciski = new JPanel(new GridLayout(1, 2));

        JButton oblicz = new JButton("Oblicz");
        oblicz.setActionCommand("31");
        oblicz.addActionListener(this);

        JButton wyczysc = new JButton("Wyczyść");
        wyczysc.setActionCommand("32");
        wyczysc.addActionListener(this);

        panelPrzyciski.add(oblicz);
        panelPrzyciski.add(wyczysc);

        add(panelPrzyciski, BorderLayout.SOUTH);
        
        Zloty2.setEditable(false);
        Zloty3.setEditable(false);
        Zloty4.setEditable(false);
        Euro2.setEditable(false);
        Funt2.setEditable(false);
        Frank2.setEditable(false);
        

    }

    public static void main(String[] args) {

        KalkulatorWalut nt = new KalkulatorWalut();
        nt.setVisible(true);
        nt.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }

    public void actionPerformed(ActionEvent e) {
        switch (Integer.parseInt(e.getActionCommand())) {
            case 11: {

                String kursEuroS = JOptionPane.showInputDialog("Podaj kurs euro");
                long kursEuro = Integer.parseInt(kursEuroS);
                break;
            }
            case 12: {

                String kursFuntaS = JOptionPane.showInputDialog("Podaj kurs funta");
                long kursFunta = Integer.parseInt(kursFuntaS);
                break;
            }
            case 13: {

                String kursFrankaS = JOptionPane.showInputDialog("Podaj kurs franka");
                long kursFranka = Integer.parseInt(kursFrankaS);
                break;
            }
            case 14: {
                System.exit(0);
                break;
            }
            case 21: {

                JOptionPane.showMessageDialog(this, "Autor: Kamil Recheta");
                break;
            }
            case 31: {
                long iloscEuro = Integer.parseInt(Euro1.getText());
                long iloscFunta = Integer.parseInt(Funt1.getText());
                long iloscFranka = Integer.parseInt(Frank1.getText());
                long iloscZlotego = Integer.parseInt(Zloty1.getText());

                long euroNaZloty = iloscEuro * kursEuro;
                long funtNaZloty = iloscFunta * kursFunta;
                long frankNaZloty = iloscFranka * kursFranka;
                long zlotyNaEuro = iloscZlotego / kursEuro;
                long zlotyNaFunt = iloscZlotego / kursFunta;
                long zlotyNaFrank = iloscZlotego / kursFranka;

                Zloty2.setText(" " + euroNaZloty + " ");
                Zloty3.setText(" " + funtNaZloty + " ");
                Zloty4.setText(" " + frankNaZloty + " ");
                Euro2.setText(" " + zlotyNaEuro + " ");
                Funt2.setText(" " + zlotyNaFunt + " ");
                Frank2.setText(" " + zlotyNaFrank + " ");

                break;
            }
            case 32: {

                Zloty1.setText("0");
                Euro1.setText("0");
                Funt1.setText("0");
                Frank1.setText("0");
                Zloty2.setText("0");
                Zloty3.setText("0");
                Zloty4.setText("0");
                Euro2.setText("0");
                Funt2.setText("0");
                Frank2.setText("0");

                break;
            }

        }

    }

}
0

Może zrób sobie klasę waluta? Unikniesz wtedy deklarowania kupy luźnych zmiennych.

0

Deklarujesz zmienne w innym scope'ie niż tym w którym chcesz jej użyć.

    case 11: {
        String kursEuroS = JOptionPane.showInputDialog("Podaj kurs euro");
        long kursEuro = Integer.parseInt(kursEuroS);
        break;
    }

W momencie zamknięcia tej klamerki zmienna "kursEuro" już nie istnieje. Żeby użyć jej niżej, zadeklaruj ją tak:

    long kursEuro;
    case 11: {
        String kursEuroS = JOptionPane.showInputDialog("Podaj kurs euro");
        kursEuro = Integer.parseInt(kursEuroS);
        break;
    }

Jeżeli chcesz jej użyć w inny zdarzeniu (np klikając przycisk drugi raz) musisz ją zadeklarować poza funkcją (tj. zmienna globalna) a najlepiej w jakiejś klasie która ogarnie waluty.

1

Powinieneś dostać "Copy Paste Seal of Approval" za ten kod. Czy gdybyś miał napisać program który pozwala przeliczać np. 1000 walut to czy też byś w ten sposób go napisał? A gdyby waluty były dynamicznie pobierane z jakiejś strony w internecie? ;]

1 użytkowników online, w tym zalogowanych: 0, gości: 1