Java “数学”;方程式;工作不正常

Java “数学”;方程式;工作不正常,java,swing,math,Java,Swing,Math,有没有人曾经在加油站或杂货店使用过这些机器,在那里你可以通过捐赠你的可回收物品来赚钱?嗯,我想做一个虚拟的,到目前为止一切都很好,直到我不得不做一些数学。我只有13岁,所以这一部分相当棘手,尽管我认为它会很简单。我需要可回收类型的价值乘以金额,然后添加到总金额中。但不是把它加到总金额中,而是把总金额变成了我最近增加的价值。假设我加了两罐,10美分,然后再加一罐,而不是总共15美分,我只有5美分。希望你能理解。我还想对我的代码提出一些建设性的批评。我知道这不是最好的,但我刚刚开始学习java,所以

有没有人曾经在加油站或杂货店使用过这些机器,在那里你可以通过捐赠你的可回收物品来赚钱?嗯,我想做一个虚拟的,到目前为止一切都很好,直到我不得不做一些数学。我只有13岁,所以这一部分相当棘手,尽管我认为它会很简单。我需要可回收类型的价值乘以金额,然后添加到总金额中。但不是把它加到总金额中,而是把总金额变成了我最近增加的价值。假设我加了两罐,10美分,然后再加一罐,而不是总共15美分,我只有5美分。希望你能理解。我还想对我的代码提出一些建设性的批评。我知道这不是最好的,但我刚刚开始学习java,所以任何帮助都会很好

    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.*;
    public class Machine {
    static JLabel label;
    static JComboBox typeList;
    static JComboBox amountList;
    public static void GUI(){

        JFrame frame = new JFrame("Recyclables Machine");
        frame.setVisible(true);
        frame.setSize(300,125);
        frame.setLocationRelativeTo(null);
        frame.setResizable(false);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel panel = new JPanel();
        frame.add(panel);

        Integer[] amounts = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50};
        amountList = new JComboBox(amounts);
        panel.add(amountList);

        String[] types = {"Choose Recycable Type","Plastic Bottle","Can","2 Liter","Glass Bottle"};
        typeList = new JComboBox(types);
        panel.add(typeList);

        JButton button = new JButton("Add");
        panel.add(button);

        label = new JLabel("Total Money: 0 cents");
        panel.add(label);

        button.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                gettinItDone();
            }
        });
    }
    public static void gettinItDone(){
        String type = (String)typeList.getSelectedItem();
        int amount = (int)amountList.getSelectedItem();
        int money = 0;
        int temp = 0;

        if(type.equals("Plastic Bottle")){
            temp = 5 * amount;
            money = temp + money;
            label.setText("Total Money: "+ money +" cents");
        }else{
            if(type.equals("Can")){
                temp = 5 * amount;
                money = temp + money;
                label.setText("Total Money: "+ money +" cents");
            }else{
                if(type.equals("2 Liter")){
                    temp = 10 * amount;
                    money = temp + money;
                    label.setText("Total Money: "+ money +" cents");
                }else{
                    if(type.equals("Glass Bottle")){
                        temp = 10 * amount;
                        money = temp + money;
                        label.setText("Total Money: "+ money +" cents");
                    }else{
                        JOptionPane.showMessageDialog(null,"Invalid Recyclable Type", "Error", JOptionPane.ERROR_MESSAGE);
                    }
                }
            }
        }
    }
}
“money”变量的作用域仅在事件侦听器激发时处于活动状态

button.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            gettinItDone();
        }
    });

您需要在#getIniitDone方法的范围之外存储您的钱。

因为您每次都会覆盖该值,或者更确切地说是在计算完全独立的值。保留一份你收集的金额的参考资料。我简直不敢相信你13岁-你的代码格式正确,不完美,但有条理,问题的格式很好。。。坚持下去。我们看到大四学生的情况更糟。。。你可能会有一个美好的职业前景!只需移动
int money=0
退出方法,并将其设置为
静态
类变量,并且不会每次重置。好问题+1和+1@ppeterka66的评论。我将int-money移到了方法之外,现在它可以工作了!非常感谢大家。现在回想起来,这很有道理。