首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Calculator对所有问题都返回0.0

Calculator对所有问题都返回0.0
EN

Stack Overflow用户
提问于 2015-12-09 03:08:50
回答 1查看 102关注 0票数 0

我在创建一个简单的计算器时遇到了一些问题,但是当我问一个问题(比如2-1)时,系统会返回0.0作为结果。我在想,我没有使用一个好的方法来分析信息。这就是我尝试将双't‘设置为文本框内的数字的方法。

代码语言:javascript
复制
insert = new JTextField();
insert.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        try {
            i = insert.getText();
            t = Double.parseDouble(i);
        } finally {}
    }; {}
});
insert.setBackground(new Color(135, 206, 235));
insert.setText("0");
insert.setFont(new Font("Tahoma", Font.PLAIN, 18));
insert.setColumns(10);
insert.setBounds(0, 50, 292, 28);
frame.getContentPane().add(insert);

如果错误不在这里,这是完整的代码:

代码语言:javascript
复制
import java.awt.EventQueue;

import javax.swing.JFrame;
import java.awt.Color;
import javax.swing.JTextField;
import java.awt.BorderLayout;
import java.awt.Font;
import javax.swing.JButton;
import javax.swing.JTabbedPane;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.InputMethodListener;
import java.util.Scanner;
import java.awt.event.InputMethodEvent;

public class Window {
    double t, x, a, l, s;
    String w, i;
    Scanner dati = new Scanner(System. in );
    private JFrame frame;
    private JTextField result;
    private JTextField insert;
    private JTextField hint;
    private JTextField score;
    private final JButton help = new JButton("?");
    private final JButton calculator = new JButton("=");

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Window window = new Window();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

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

    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {
        frame = new JFrame();
        frame.getContentPane().setBackground(new Color(135, 206, 235));
        frame.getContentPane().setLayout(null);
        calculator.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (l < 6 && l > 0) {
                    if (l != 2 && l != 3 && l != 4 && l != 5); {
                        s = x + t;
                    }
                    if (l != 1 && l != 3 && l != 4 && l != 5); {
                        s = x - t;
                    }
                    if (l != 1 && l != 2 && l != 4 && l != 5); {
                        s = x * t;
                    }
                    if (l != 1 && l != 2 && l != 3 && l != 5); {
                        s = x / t;
                    }
                    if (l != 1 && l != 2 && l != 4 && l != 3); {
                        s = (x / 100) * t;
                    }
                    result.setText(Double.toString(s));
                } else {
                    result.setText("Kļūda programmā :(");
                }
                t = 0;
                x = 0;
                l = 0;
                a = 0;
            }
        });
        calculator.setBounds(292, 57, 52, 20);
        frame.getContentPane().add(calculator);
        calculator.setBackground(new Color(135, 206, 235));
        help.setBackground(new Color(135, 206, 235));
        help.setBounds(292, 0, 52, 20);
        frame.getContentPane().add(help);

        score = new JTextField();
        score.setEditable(false);
        score.setText("\u0160eit rezult\u0101ts");
        score.setColumns(10);
        score.setBounds(344, 0, 100, 20);
        frame.getContentPane().add(score);

        hint = new JTextField();
        hint.setEditable(false);
        hint.setText("\u0160eit tavi skait\u013Ci");
        hint.setBounds(344, 57, 100, 20);
        frame.getContentPane().add(hint);
        hint.setColumns(10);

        insert = new JTextField();
        insert.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                try {
                    i = insert.getText();
                    t = Double.parseDouble(i);
                } finally {}
            }; {}
        });
        insert.setBackground(new Color(135, 206, 235));
        insert.setText("0");
        insert.setFont(new Font("Tahoma", Font.PLAIN, 18));
        insert.setColumns(10);
        insert.setBounds(0, 50, 292, 28);
        frame.getContentPane().add(insert);

        result = new JTextField();
        result.setEditable(false);
        result.setBackground(new Color(135, 206, 235));
        result.setBounds(0, 0, 292, 28);
        result.setText("Hei!");
        result.setFont(new Font("Tahoma", Font.PLAIN, 18));
        frame.getContentPane().add(result);
        result.setColumns(10);

        JButton add = new JButton("+");
        add.setBackground(new Color(135, 206, 250));
        add.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                if (a != 0) {
                    x = x + t;
                    t = 0;
                    l = 1;
                } else {
                    x = t;
                    t = 0;
                    a = 1;
                    l = 1;
                }
            }
        });
        add.setBounds(0, 28, 89, 23);
        frame.getContentPane().add(add);

        JButton subtract = new JButton("-");
        subtract.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (a != 0) {
                    x = x - t;
                    t = 0;
                    l = 2;
                } else {
                    x = t;
                    t = 0;
                    a = 1;
                    l = 2;
                }
            }
        });
        subtract.setBackground(new Color(135, 206, 235));
        subtract.setBounds(89, 28, 89, 23);
        frame.getContentPane().add(subtract);

        JButton multiply = new JButton("x");
        multiply.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (a != 0) {
                    x = x * t;
                    t = 0;
                    l = 3;
                } else {
                    x = t;
                    t = 0;
                    a = 1;
                    l = 3;
                }
            }
        });
        multiply.setBackground(new Color(135, 206, 235));
        multiply.setForeground(new Color(0, 0, 0));
        multiply.setBounds(178, 28, 89, 23);
        frame.getContentPane().add(multiply);

        JButton divide = new JButton("/");
        divide.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (a != 0) {
                    x = x / t;
                    t = 0;
                    l = 4;
                } else {
                    x = t;
                    t = 0;
                    a = 1;
                    l = 4;
                }
            }
        });
        divide.setBackground(new Color(135, 206, 235));
        divide.setBounds(266, 28, 89, 23);
        frame.getContentPane().add(divide);

        JButton percent = new JButton("%");
        percent.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (a != 0) {
                    x = (x / 100) * t;
                    t = 0;
                    l = 5;
                } else {
                    x = t;
                    t = 0;
                    a = 1;
                    l = 5;
                }
            }
        });
        percent.setBackground(new Color(135, 206, 235));
        percent.setBounds(355, 28, 89, 23);
        frame.getContentPane().add(percent);
        frame.setBounds(100, 100, 460, 115);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        dati.close();
    }
}

可能我使用了一种不好的计算方法。

如果你想要一个简单的解释,我正在尝试创建一个有五个函数的计算器- +,-,*,/,%-并有一个文本框来插入你想要计算的数字-插入,单击函数按钮,插入,完成后单击函数按钮-=按钮。“?”按钮计划给出计算器的描述。顺便说一句,我是为学校的一个项目做的。

提前谢谢。

P.S.Kļūda programmā翻译为程序中的错误。

EN

回答 1

Stack Overflow用户

发布于 2015-12-09 03:17:34

actionListener上,在if语句中的每个{之前都有一个;。另外,你的情况很奇怪,从这里改变它。并添加else语句或switch

代码语言:javascript
复制
calculator.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        if (l < 6 && l > 0) {
            if (l != 2 && l != 3 && l != 4 && l != 5); {
                s = x + t;
            }
            if (l != 1 && l != 3 && l != 4 && l != 5); {
                s = x - t;
            }
            if (l != 1 && l != 2 && l != 4 && l != 5); {
                s = x * t;
            }
            if (l != 1 && l != 2 && l != 3 && l != 5); {
                s = x / t;
            }
            if (l != 1 && l != 2 && l != 4 && l != 3); {
                s = (x / 100) * t;
            }
            result.setText(Double.toString(s));
        } else {
            result.setText("Kļūda programmā :(");
        }
        t = 0;
        x = 0;
        l = 0;
        a = 0;
    }
});

要这样做:

代码语言:javascript
复制
calculator.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        if (l < 6 && l > 0) {
            if (l == 1) {
                s = x + t;
            } else if (l == 2) {
                s = x - t;
            } else if (l == 3) {
                s = x * t;
            } else if (l == 4) {
                s = x / t;
            } else if (l == 5) {
                s = (x / 100) * t;
            }
            result.setText(Double.toString(s));
        } else {
            result.setText("Kļūda programmā :(");
        }
        t = 0;
        x = 0;
        l = 0;
        a = 0;
    }
});

或者这个(推荐):

代码语言:javascript
复制
calculator.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        switch (l) {
            case 1:
                s = x + t;
                result.setText(Double.toString(s));
                break;
            case 2:
                s = x - t;
                result.setText(Double.toString(s));
                break;
            case 3:
                s = x * t;
                result.setText(Double.toString(s));
                break;
            case 4:
                s = x / t;
                result.setText(Double.toString(s));
                break;
            case 5:
                s = (x / 100) * t;
                result.setText(Double.toString(s));
                break;
            default:
                result.setText("Kļūda programmā :(");
                break;
        }
        t = 0;
        x = 0;
        l = 0;
        a = 0;
    }
});

另外,建议避免使用Null布局,而是使用Layout Manager或它们的组合。这将防止bug,因为Swing就是为处理bug而设计的。有关这方面的更多信息,请阅读Why is it frowned upon to use a null layout in swing。另外,请查看The use of multiple JFrames, Good / Bad Practice

编辑

要从您的程序中获得一个非常类似的视图并使其工作,您可以尝试如下所示的方法,它不使用空布局,并且在每次循环+按钮时都会打印该值。其余的按钮还不能工作(请看我的代码如何使用这些按钮,并将此逻辑应用于其他按钮):

代码语言:javascript
复制
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
public class LayoutExample {
    double number = 0;
    JFrame frame;
    JLabel label;
    JTextField field;
    JButton add, substract, mult, divide, total, help, perc;
    JPanel topPane, buttonPane, fieldPane;
    LayoutExample() {
        frame = new JFrame("Calculator");
        label = new JLabel("Result: ");
        field = new JTextField("0");
        add = new JButton("+");
        substract = new JButton("-");
        mult = new JButton("*");
        divide = new JButton("/");
        total = new JButton("=");
        perc = new JButton("%");
        help = new JButton("?");
        topPane = new JPanel();
        buttonPane = new JPanel();
        fieldPane = new JPanel();
        
        field.setColumns(10);
        
        topPane.setLayout(new FlowLayout());
        buttonPane.setLayout(new FlowLayout());
        fieldPane.setLayout(new FlowLayout());
        
        topPane.add(label);
        topPane.add(help);
        
        add.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                try {
                    number += Integer.parseInt(field.getText());
                } catch (NumberFormatException nfe) {
                    nfe.printStackTrace();
                }
            }
        });
        
        total.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                label.setText("Result: " + number);
            }
        });
        
        buttonPane.add(add);
        buttonPane.add(substract);
        buttonPane.add(mult);
        buttonPane.add(divide);
        buttonPane.add(perc);
        
        fieldPane.add(field);
        fieldPane.add(total);
        
        frame.add(topPane, BorderLayout.PAGE_START);
        frame.add(buttonPane, BorderLayout.CENTER);
        frame.add(fieldPane, BorderLayout.PAGE_END);
        
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }
    public static void main(String args[]) {
        new LayoutExample();
    }
}

如您所见,输出与您的输出非常相似:

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34164022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档