2014-11-15 32 views
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); 
     } 
    } 
} 
+0

你說'fundsDouble'是你的總計,但你不會在代碼中的任何地方更新它。在計算物品的價格後,您需要用新的總數更新'fundsDouble'。 – azurefrog

+0

不,'fundsDouble'將持有'基金'字符串版本,我的運行總變量。 '基金'是運行的總變量,它工作正常。這是「基金雙倍」,是罪魁禍首,我不知道爲什麼它不起作用。 – MatthewS

+0

你可能沒有將價值傳遞給模型? – Jayan

回答

0

azurefrog解決了這個問題。 (他們的回答在問題的評論中。)我需要在calculateFunds方法中將fundsDouble設置爲正在運行的總變量funds