0
我在我的控制器中有一個運行總量,可以跟蹤最終用戶通過點擊按鈕插入的金錢。當最終用戶點擊'購買'按鈕時,運行總量被分配給將被髮送到模型中的字符串變量;但是,字符串變量不保持運行的總變量持有的相同值。我已經傾注了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);
}
}
}
你說'fundsDouble'是你的總計,但你不會在代碼中的任何地方更新它。在計算物品的價格後,您需要用新的總數更新'fundsDouble'。 – azurefrog
不,'fundsDouble'將持有'基金'字符串版本,我的運行總變量。 '基金'是運行的總變量,它工作正常。這是「基金雙倍」,是罪魁禍首,我不知道爲什麼它不起作用。 – MatthewS
你可能沒有將價值傳遞給模型? – Jayan