Avatar billede montymus Nybegynder
26. februar 2004 - 10:13 Der er 10 kommentarer og
1 løsning

lommeregner med plus minus funktion

jeg sider og er ved at lave en lommeregner og har lavet GUI og def de forskelige knapper jeg kan bare ikke få +/- funktionen til at virke
Dette er koden men der er fejl.
Nogen der har nogle ideer til at lave det????

if (ae.getSource() == plusMinus){
            tal1 = Double.parseDouble(input.getText());
            tegn = "-";
            tal1 = tegn + tal1;
            input.setText("");

RESTEN AF KODEN

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;


public class JFrame_1 extends javax.swing.JFrame implements ActionListener{

    public JFrame_1() {
        setTitle("Regnemaskine");
        setResizable(false);
        initComponents();
    }


    private void initComponents() {
        getContentPane().setLayout(new java.awt.GridBagLayout());
        java.awt.GridBagConstraints gbc = new java.awt.GridBagConstraints();

        knap = new JButton[10];

        for(int i = 0;i < 10; i++){
            knap[i] = new JButton(Integer.toString(i));
        }

        input = new JTextField(15);
        input.setHorizontalAlignment(SwingConstants.RIGHT);
        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.fill = java.awt.GridBagConstraints.BOTH;
        getContentPane().add(input, gbc);

        panel = new JPanel();
        panel.setLayout(new java.awt.GridLayout(4, 4));
        gbc.gridx = 0;
        gbc.gridy = 1;
        gbc.fill = java.awt.GridBagConstraints.BOTH;
        getContentPane().add(panel, gbc);

        komma = new JButton(",");
        plusMinus = new JButton("+/-");
        multipl = new JButton("*");
        divider = new JButton("/");
        plus = new JButton("+");
        minus = new JButton("-");
        c = new JButton("C");
        ce = new JButton("CE");
        sum = new JButton("=");


        panel.add(knap[7]);
        panel.add(knap[8]);
        panel.add(knap[9]);
        panel.add(divider);
        panel.add(knap[4]);
        panel.add(knap[5]);
        panel.add(knap[6]);
        panel.add(multipl);
        panel.add(knap[1]);
        panel.add(knap[2]);
        panel.add(knap[3]);
        panel.add(minus);
        panel.add(knap[0]);
        panel.add(komma);
        panel.add(plusMinus);
        panel.add(plus);

        panel2 = new JPanel();
        panel2.setLayout(new java.awt.GridBagLayout());
        pack();

        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.fill = java.awt.GridBagConstraints.BOTH;
        c.setPreferredSize(new java.awt.Dimension(panel.getWidth()/4,
                                                    panel.getHeight()/4));
        panel2.add(c, gbc);

        gbc.gridx = 1;
        gbc.gridy = 0;
        gbc.gridwidth = 2;
        gbc.fill = java.awt.GridBagConstraints.BOTH;
        ce.setPreferredSize(new java.awt.Dimension( (int)((panel.getWidth()/4) * 1.5),
                                                            panel.getHeight()/4));
        panel2.add(ce, gbc);

        gbc.gridx = 3;
        gbc.gridy = 0;
        gbc.gridwidth = 2;
        gbc.fill = java.awt.GridBagConstraints.BOTH;
        sum.setPreferredSize(new java.awt.Dimension((int)((panel.getWidth()/4) * 1.5),
                                                                panel.getHeight()/4));
        panel2.add(sum, gbc);

        gbc.gridx = 0;
        gbc.gridy = 2;
        gbc.fill = java.awt.GridBagConstraints.BOTH;
        getContentPane().add(panel2, gbc);

        pack();

        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                exitForm(evt);
            }
        });

    }

    private void exitForm(java.awt.event.WindowEvent evt) {
        System.exit(0);
    }

public void actionPerformed(ActionEvent ae){
    if (ae.getSource() == multipl){
        double  tal1 = Double.parseDouble(input.getText());
        tegn = "*";
        input.setText("");

    }
    if (ae.getSource() == divider){
        double tal1 = Double.parseDouble(input.getText());
            tegn = "/";
            input.setText("");

    }
    if (ae.getSource() == plus){
        double    tal1 = Double.parseDouble(input.getText());
            tegn = "+";
            input.setText("");

    }
    if (ae.getSource() == minus){
        double    tal1 = Double.parseDouble(input.getText());
            tegn = "-";
            input.setText("");

    }
    if (ae.getSource() == plusMinus){
            tal1 = Double.parseDouble(input.getText());
            tegn = "-";
            tal1 = tegn + tal1;
            input.setText("");

    }
}







public static void main(String args[]) {
        new JFrame_1().show();
    }

    private JButton[] knap;
    private JButton komma;
    private JButton plusMinus;
    private JButton multipl;
    private JButton divider;
    private JButton plus;
    private JButton minus;
    private JButton c;
    private JButton ce;
    private JButton sum;
    private JPanel panel, panel2;
    private JTextField input;
    private Double tal1;
    private String tegn;
}


    }
Avatar billede arne_v Ekspert
26. februar 2004 - 10:21 #1
Jeg tror at:

tal1 = tegn + tal1;
           
skal være:

tal1 = -tal1;
Avatar billede schristensen Praktikant
26. februar 2004 - 10:22 #2
Det er fortegn minus/plus ik?

/*
if (ae.getSource() == plusMinus){
            tal1 = Double.parseDouble(input.getText());
            tegn = "-";
            tal1 = tegn + tal1;
            input.setText("");
*/

Denne linie "tal1 = tegn + tal1;" tager du en int og klister en streng på, og prøver at sætte det lig med int - hvilket ikke går godt.

Du kunne måske gøre noget lignende..

if (ae.getSource() == plusMinus){
            tal1 = Double.parseDouble(input.getText());
            tegn = "-";
            tal1 = Double.parseDouble( tegn + tal1 );
            input.setText("");
Avatar billede montymus Nybegynder
26. februar 2004 - 10:58 #3
if (ae.getSource() == plusMinus){
            tal1 = Double.parseDouble(input.getText());
            tegn = "-";
            tal1 = Double.parseDouble( tegn + tal1 );
            input.setText("");

Virker ikke helt den siger incompatible type
Avatar billede schristensen Praktikant
26. februar 2004 - 11:03 #4
hvilken type er tal1???
Avatar billede montymus Nybegynder
26. februar 2004 - 11:09 #5
Det er ikke noget det skal bare være der
Avatar billede schristensen Praktikant
26. februar 2004 - 11:16 #6
Følgende virker hos mig...


if (ae.getSource() == plusMinus){
        double tal1 = Double.parseDouble(input.getText());
        String tegn = "-";
              tal1 = Double.parseDouble( tegn + tal1 );
              input.setText("");
Avatar billede arne_v Ekspert
26. februar 2004 - 11:57 #7
Jeg mener stadig at det er:

    if (ae.getSource() == plusMinus){
            double tal1 = Double.parseDouble(input.getText());
            tal1 = -tal1;
            input.setText(Double.toString(tal1));

    }

du vil !
Avatar billede schristensen Praktikant
26. februar 2004 - 11:59 #8
Resultatet er det samme...
Avatar billede arne_v Ekspert
26. februar 2004 - 12:16 #9
For det første er det unødvendigt dyrt at konvertere fra tal til tekst og
tilbage igen.

For det andet virker det kun halvt.

parseDouble af --123 giver en NumberFormatException !
Avatar billede schristensen Praktikant
26. februar 2004 - 12:26 #10
godt så..
Avatar billede arne_v Ekspert
28. februar 2004 - 12:44 #11
Noget modificeret kode:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;

public class JFrame_1 extends javax.swing.JFrame implements ActionListener {
    private JButton[] knap;
    private JButton komma;
    private JButton plusMinus;
    private JButton multiply;
    private JButton divide;
    private JButton plus;
    private JButton minus;
    private JButton c;
    private JButton ce;
    private JButton sum;
    private JPanel panel, panel2;
    private JTextField input;
    private Double tal1;
    private String tegn;
    private double acc;

    public JFrame_1() {
        setTitle("Regnemaskine");
        setResizable(false);
        initComponents();
    }

    private void initComponents() {
        getContentPane().setLayout(new GridBagLayout());
        GridBagConstraints gbc = new GridBagConstraints();

        knap = new JButton[10];

        for (int i = 0; i < 10; i++) {
            knap[i] = new JButton(Integer.toString(i));
            knap[i].addActionListener(this);
        }

        input = new JTextField(15);
        input.setHorizontalAlignment(SwingConstants.RIGHT);
        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.fill = GridBagConstraints.BOTH;
        getContentPane().add(input, gbc);

        panel = new JPanel();
        panel.setLayout(new GridLayout(4, 4));
        gbc.gridx = 0;
        gbc.gridy = 1;
        gbc.fill = java.awt.GridBagConstraints.BOTH;
        getContentPane().add(panel, gbc);

        komma = new JButton(",");
        komma.addActionListener(this);
        plusMinus = new JButton("+/-");
        plusMinus.addActionListener(this);
        multiply = new JButton("*");
        multiply.addActionListener(this);
        divide = new JButton("/");
        divide.addActionListener(this);
        plus = new JButton("+");
        plus.addActionListener(this);
        minus = new JButton("-");
        minus.addActionListener(this);
        c = new JButton("C");
        c.addActionListener(this);
        ce = new JButton("CE");
        ce.addActionListener(this);
        sum = new JButton("=");
        sum.addActionListener(this);

        panel.add(knap[7]);
        panel.add(knap[8]);
        panel.add(knap[9]);
        panel.add(divide);
        panel.add(knap[4]);
        panel.add(knap[5]);
        panel.add(knap[6]);
        panel.add(multiply);
        panel.add(knap[1]);
        panel.add(knap[2]);
        panel.add(knap[3]);
        panel.add(minus);
        panel.add(knap[0]);
        panel.add(komma);
        panel.add(plusMinus);
        panel.add(plus);

        panel2 = new JPanel();
        panel2.setLayout(new GridBagLayout());
        pack();

        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.fill = GridBagConstraints.BOTH;
        c.setPreferredSize(new Dimension(panel.getWidth() / 4, panel.getHeight() / 4));
        panel2.add(c, gbc);

        gbc.gridx = 1;
        gbc.gridy = 0;
        gbc.gridwidth = 2;
        gbc.fill = GridBagConstraints.BOTH;
        ce.setPreferredSize(new Dimension((int) ((panel.getWidth() / 4) * 1.5), panel.getHeight() / 4));
        panel2.add(ce, gbc);

        gbc.gridx = 3;
        gbc.gridy = 0;
        gbc.gridwidth = 2;
        gbc.fill = GridBagConstraints.BOTH;
        sum.setPreferredSize(new Dimension((int) ((panel.getWidth() / 4) * 1.5), panel.getHeight() / 4));
        panel2.add(sum, gbc);

        gbc.gridx = 0;
        gbc.gridy = 2;
        gbc.fill = GridBagConstraints.BOTH;
        getContentPane().add(panel2, gbc);

        tegn = " ";
        acc = 0;

        pack();

        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                exitForm(evt);
            }
        });

    }

    private void exitForm(java.awt.event.WindowEvent evt) {
        System.exit(0);
    }

    public void actionPerformed(ActionEvent ae) {
        if (ae.getSource() == multiply) {
            update();
            tegn = "*";
            input.setText("");
        } else if (ae.getSource() == divide) {
            update();
            tegn = "/";
            input.setText("");
        } else if (ae.getSource() == plus) {
            update();
            tegn = "+";
            input.setText("");
        } else if (ae.getSource() == minus) {
            update();
            tegn = "-";
            input.setText("");
        } else if (ae.getSource() == plusMinus) {
            double tal1 = Double.parseDouble(input.getText());
            tal1 = -tal1;
            input.setText(Double.toString(tal1));
        } else if (ae.getSource() == komma) {
            input.setText(input.getText() + ".");
        } else if (ae.getSource() == ce) {
            input.setText("");
            acc = 0;
        } else if (ae.getSource() == c) {
            input.setText("");
        } else if (ae.getSource() == sum) {
            update();
            tegn = " ";
            input.setText(Double.toString(acc));
        } else {
            for(int i = 0; i < 10; i++) {
                if(ae.getSource() == knap[i]) {
                    input.setText(input.getText() + i);
                }
            }
        }
    }
   
    private void update() {
        if(tegn.equals(" ")) {
            acc = Double.parseDouble(input.getText());
        } else if(tegn.equals("+")) {
            acc += Double.parseDouble(input.getText());
        } else if(tegn.equals("-")) {
            acc -= Double.parseDouble(input.getText());
        } else if(tegn.equals("*")) {
            acc *= Double.parseDouble(input.getText());
        } else if(tegn.equals("/")) {
            acc /= Double.parseDouble(input.getText());
        }
    }

    public static void main(String args[]) {
        new JFrame_1().show();
    }
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester