У меня есть общий итог в моем контроллере, который будет отслеживать деньги, которые конечный пользователь вставил с помощью нажатия кнопок. Когда конечный пользователь нажимает кнопку «покупка», общая сумма присваивается строковой переменной, которая будет отправлена в модель; однако строковая переменная не поддерживает то же значение, что и текущая общая переменная. Я вылил из отладки 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» будет содержать строковую версию «фондов», мою текущую общую переменную. «фонды» - это текущая общая переменная, и она отлично работает. Это «moneyDouble», это преступник, и я не знаю, почему он не работает. – MatthewS
Возможно, вы не передаете значения модели? – Jayan