我的控制器中有一个运行总计,它将通过点击按钮跟踪最终用户插入的钱。当最终用户点击“购买”按钮时,将运行总计分配给将发送到模型中的字符串变量;但是,字符串变量没有保持运行总变量所持有的值。我倾注了Eclipse的调试并完成了代码,但这超出了我的范围。我将不胜感激任何帮助:)
“购买”按钮的类位于代码段的最底部。保存运行总计值的字符串称为“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);
}
}
}
答案 0 :(得分:0)
azurefrog解决了这个问题。 (他们的答案在问题的评论中。)我需要在fundsDouble
方法中将funds
设置为正在运行的总变量calculateFunds
。