如何通过JTextfield输入

时间:2016-11-06 20:33:48

标签: java

我的代码工作正常,但事实上我无法获得准确的totalBill!以下是我的代码,问题区域在button_1操作中。我确信这对我的数学来说很简单,但结果如果我输入:100(支付额外费用)15(总税额)和10(总费用数额)输出到123,仅仅是2正确。对于我的生活,我重复了分数数学,我只是难倒我相信它是相对容易的东西,我只是没有看到它。任何帮助深表感谢。

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.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class unit6_Q2 extends JFrame {

    JPanel main_1 = new JPanel();
    JLabel main_2 = new JLabel();
    JTextField question_1 = new JTextField("Enter amount here",30);
    JTextField question_2 = new JTextField("Enter tax percent here", 30);
    JTextField question_3 = new JTextField("Enter tip amount here", 30);
    JButton button_1 = new JButton("Calculate");

    public unit6_Q2() {
        setTitle("Tutorial");
        setVisible(true);
        setSize(400,200);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        main_1.add(question_1);
        main_1.add(question_2);
        main_1.add(question_3);

        //if I want the use of enter on each TextField
        /*
        question_1.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                String input_1 = question_1.getText();              
            }
        });

        question_2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String input_2 = question_2.getText();
            }
        });
        question_3.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String input_2 = question_3.getText();
            }
        });  */

        main_1.add(button_1);
        button_1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String input_1 = question_1.getText();  
                String input_2 = question_2.getText();
                String input_3 = question_3.getText();
                int amountSpent = Integer.parseInt(input_1);
                int amountTaxed = Integer.parseInt(input_2);
                int amountTipped = Integer.parseInt(input_3);

                int totalTax = (int)(amountSpent * (amountTaxed*(1/100.0f)));
                int totalTipped =(int)(amountSpent * (amountTipped*(1/100.0f)));
                int totalBill = totalTipped + totalTax + amountSpent;
                JOptionPane.showMessageDialog(null, totalBill);
            }
        });
        add(main_1);
    }
    public static void main(String[] args) {

        unit6_Q2 display = new unit6_Q2();
    }
}

2 个答案:

答案 0 :(得分:1)

这是因为您正在截断大量数据。

            int totalTax = (int)(amountSpent * (amountTaxed*(1/100.0f)));
            int totalTipped =(int)(amountSpent * (amountTipped*(1/100.0f)));

使用Math.round()投放(int),或者只是坚持使用浮动点。

你这样做的方法是,假设totalTax为1.9,由于int cast,它将变为1。

答案 1 :(得分:1)

提示,为了解决这些问题,通常有助于将它们“减少”到核心。在你的情况下:计算。绝对不需要来添加UI复杂性。你看......

public class Test {
  public static void main(String[] args) {
     int amountSpent = Integer.parseInt("100");
     int amountTaxed = Integer.parseInt("15");
     int amountTipped = Integer.parseInt("10");

     int totalTax = (int)( amountSpent * amountTaxed/100.0f );
     System.out.println(totalTax);
     int totalTipped =(int)(amountSpent * amountTipped/100.0f);
     System.out.println(totalTipped);
     int totalBill = totalTipped + totalTax + amountSpent;
     System.out.println(totalBill);
    }
 }

正常工作(因为它避免了从float到int的“中间”转换;这会给你那些舍入错误)。

所以,我的答案更多的是如何解决这些问题的策略:

  1. 摆脱对此问题没有贡献的任何。在你的情况下:UI元素和这样的东西
  2. 然后研究数学时的确切规则,例如here