简体   繁体   中英

Why isn't my running total working?

I have a running total in my controller that will keep track of money the end user has inserted via the clicking of buttons. When the end user clicks the 'purchase' button, the running total is assigned to a string variable that will be sent into the model; however, the string variable is not holding the same value that the running total variable is holding. I have poured over Eclipse's debug and walked through the code, but this is beyond me. I would appreciate any help :)

The 'purchase' button's class is near the very bottom of the code snippet. The string that holds the running total's value is called 'fundsDouble'.

package edu.witc.controller;

//Importing necessary packages
//Intangible packages
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

//Other classes
import edu.witc.view.VendingMachine;
import edu.witc.model.Products;


//Parent class
public class Controller
{
    // Declare all variables here: the Declare Monster be lurkin' in these parts
    private VendingMachine view = null;         // A reference to our view
    private Products model = new Products();    // A reference to our model
    private double funds = 0.00;                // See the method 'calculateFunds'


    // Default constructor
    public Controller()
    {

    }


    // Overloaded constructor for the parent class
    public Controller(VendingMachine view)
    {
        // Here, we are simply connecting to the listeners in the view
        // Making sure Java knows what our view is because Java is not very smart
        this.view = view;


        // Instantiating button listener classes
            // Money Buttons
                // Nickel Button
        NickelButtonListener nickelListen = new NickelButtonListener();
                // Dime Button
        DimeButtonListener dimeListen = new DimeButtonListener();
                // Quarter Button
        QuarterButtonListener quarterListen = new QuarterButtonListener();
                // One Dollar Button
        OneDollarButtonListener oneDollarListen = new OneDollarButtonListener();
                // Five Dollars Buttons
        FiveDollarsButtonListener fiveDollarsListen = new FiveDollarsButtonListener();
            // Other Buttons
                // Purchase Button
        PurchaseButtonListener purchaseListen = new PurchaseButtonListener();
                // Cancel Button
        CancelButtonListener cancelListen = new CancelButtonListener();

        // Then pinning our 'VendingMachine' buttons to their listeners
            // Money Buttons
                // Nickel Button
        this.view.addNickelListener(nickelListen);
                // Dime Button
        this.view.addDimeListener(dimeListen);
                // Quarter Button
        this.view.addQuarterListener(quarterListen);
                // One Dollar Button
        this.view.addOneDollarListener(oneDollarListen);
                // Five Dollar Button
        this.view.addFiveDollarsListener(fiveDollarsListen);
            // Other Buttons
                // Purchase Button
        this.view.addPurchaseListener(purchaseListen);
                // Cancel Button
        this.view.addCancelListener(cancelListen);
    }


    // This function handles the funds the end user inserts into the vending machine
    private void calculateFunds(double money)
    {
        // We're going to add funds for the end user, depending on which button they clicked, which is why 'money' doesn't represent a specified coin/bill
        funds = funds + money;

        // Send 'funds' to the view
        view.setFunds(funds);
    }


    // This method handles the displaying of the end user's change
    public void displayChange()
    {
        String change = model.getChange();

        // Display the end user's change
        view.displayMessage(change);
    }


    // What follows are our various classes for our many buttons on the form
        // Money Buttons
            // Nickel Button
    class NickelButtonListener implements ActionListener
    {
        // This variable represents a nickel
        private double nickel = 0.05;

        // "Who woke me up?" asked the 'actionPerformed' method, and we're telling it that 'e' did, which is an 'ActionEvent' object
        public void actionPerformed(ActionEvent e)
        {
            // Call the 'funds' function to add funds to the vending machine
            calculateFunds(nickel);
        }
    }
            // Dime Button
    class DimeButtonListener implements ActionListener
    {
        // This variable represents a dime
        private double dime = 0.10;

        // "Who woke me up?" asked the 'actionPerformed' method, and we're telling it that 'e' did, which is an 'ActionEvent' object
        public void actionPerformed(ActionEvent e)
        {
            // Call the 'funds' function to add funds to the vending machine
            calculateFunds(dime);
        }
    }
            // Quarter Button
    class QuarterButtonListener implements ActionListener
    {
        // This variable represents a quarter
        private double quarter = 0.25;

        // "Who woke me up?" asked the 'actionPerformed' method, and we're telling it that 'e' did, which is an 'ActionEvent' object
        public void actionPerformed(ActionEvent e)
        {
            // Call the 'funds' function to add funds to the vending machine
            calculateFunds(quarter);
        }
    }
            // One Dollar Button
    class OneDollarButtonListener implements ActionListener
    {
        // This variable represents one dollar
        private double oneDollar = 1.00;

        // "Who woke me up?" asked the 'actionPerformed' method, and we're telling it that 'e' did, which is an 'ActionEvent' object
        public void actionPerformed(ActionEvent e)
        {
            // Call the 'funds' function to add funds to the vending machine
            calculateFunds(oneDollar);
        }
    }
            // Five Dollars Button
    class FiveDollarsButtonListener implements ActionListener
    {
        // This variable represents five dollars
        private double fiveDollars = 5.00;

        // "Who woke me up?" asked the 'actionPerformed' method, and we're telling it that 'e' did, which is an 'ActionEvent' object
        public void actionPerformed(ActionEvent e)
        {
            // Call the 'funds' function to add funds to the vending machine
            calculateFunds(fiveDollars);
        }
    }
        // Other Buttons
            // Purchase Button
    class PurchaseButtonListener implements ActionListener
    {
        // Declare your variables here
        String itemNumber = "";                         // When the end user submits an item number, this variable will capture that item number
        String fundsDouble = String.valueOf(funds);     // This is the end user's funds that they're going to be purchasing with
        String message = "";


        // "Who woke me up?" asked the 'actionPerformed' method, and we're telling it that 'e' did, which is an 'ActionEvent' object
        @Override
        public void actionPerformed(ActionEvent e)
        {
            // Get the item number
            itemNumber = view.getItemNumber();

            // Send 'itemNumber' to a method that will handle its purpose
            model.calculatePrice(itemNumber, fundsDouble);

            // POSSIBLY, WE CAN SEND OUR MESSAGE TO THE VIEW FROM HERE
            displayChange();
        }
    }
    // Cancel Button
    class CancelButtonListener implements ActionListener
    {
        // "Who woke me up?" asked the 'actionPerformed' method, and we're telling it that 'e' did, which is an 'ActionEvent' object
        public void actionPerformed(ActionEvent e)
        {
            // Send a good bye message to the end user
            view.displayMessage("Your money has been returned to you. Goodbye!");

            // Now quit the application
            System.exit(0);
        }
    }
}

azurefrog solved the issue. (Their answer is in the comments of the question.) I needed to set fundsDouble to the running total variable, funds , in the calculateFunds method.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM