【问题标题】:Adding to running total variable?添加到运行总变量?
【发布时间】:2020-03-12 22:09:33
【问题描述】:

我正在尝试制作一个餐厅菜单选择器 我有一个订单课程和另一个连接到选择饮料菜单的课程

我的订单类(表)有一个运行总变量。 我试图将一个项目的价格添加到运行总计中,但语法有问题

selectedItem.getPrice();

        Table tbl = new Table();
        tbl.setRunningTotal() + selectedItem.getPrice();

我在创建表类的“实例”然后使用设置的运行总计“setter”并将其添加到选定的 fooditems 获取价格方法中是否正确?

这是完整的“表格”类

package sample;

import java.util.ArrayList;

public class Table {
   private ArrayList<FoodDrinkController> customers;
   private String tablenumber;
   private ArrayList order;
   private double runningTotal;
   private double totalCalories;

   public Table(ArrayList<FoodDrinkController> customers, String tablenumber, ArrayList order, double runningTotal, double totalCalories) {
      this.customers = customers;
      this.tablenumber = tablenumber;
      this.order = order;
      this.runningTotal = runningTotal;
      this.totalCalories = totalCalories;
   }

   public Table() {

   }

   public ArrayList<FoodDrinkController> getCustomers() {
      return customers;
   }

   public void setCustomers(ArrayList<FoodDrinkController> customers) {
      this.customers = customers;
   }

   public String getTablenumber() {
      return tablenumber;
   }

   public void setTablenumber(String tablenumber) {
      this.tablenumber = tablenumber;
   }

   public ArrayList getOrder() {
      return order;
   }

   public void setOrder(ArrayList order) {
      this.order = order;
   }

   public double getRunningTotal() {
      return runningTotal;
   }

   public void setRunningTotal(double runningTotal) {
      this.runningTotal = runningTotal;
   }

   public double getTotalCalories() {
      return totalCalories;
   }

   public void setTotalCalories(double totalCalories) {
      this.totalCalories = totalCalories;
   }


}

任何帮助将不胜感激 我要做的就是将食品价格属性添加到另一个类的运行总属性中

****编辑****

这是 SelectDrinkControlleerGUI 类

package sample;

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.ListView;
import javafx.stage.Stage;

import java.util.ArrayList;

public class SelectDrinkControllerGUI extends Application {




    public ListView<FoodDrink> lvDrinks;
    private FoodDrinkController fdc = new FoodDrinkController();
    private Table table;











    public SelectDrinkControllerGUI() {


    }

    @Override
    public void start(Stage stage) throws Exception {

    }


    // Filters the menu items so i just displays drinks in the listview
    @FXML
    public void initialize() {
        System.out.println("initialize");
        ObservableList<FoodDrink> items = fdc.filterByType(Global.itemtype.DRINK);
        ArrayList<FoodDrink> stringList = new ArrayList<>();
        //System.out.println(items);
        for (FoodDrink item : items) {
            stringList.add(item);


        }

        lvDrinks.setItems(FXCollections.observableList(stringList));

    }

    // Button that adds the selected item to the order array
    public void addEntry(ActionEvent actionEvent){
        FoodDrink selectedItem = lvDrinks.getSelectionModel().getSelectedItem();
        fdc.order.add(selectedItem);

        selectedItem.getPrice();

        Table tbl = new Table();
        tbl.setRunningTotal(tbl.getRunningTotal() + selectedItem.getPrice());

        System.out.println("" + tbl.getRunningTotal());

        System.out.println(fdc.order);



    }
}

这是处理所有类型食物的 FoodDrinkController 类

package sample;

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;

import java.util.ArrayList;

public class FoodDrinkController {
    private ArrayList<FoodDrink> fullList = new ArrayList<>();




    public ArrayList<FoodDrink> order = new ArrayList<FoodDrink>();








    //constructor with some stuff in it
    public FoodDrinkController(){

        FoodDrink cola = new FoodDrink("Coca Cola", 2.99, Global.itemtype.DRINK);
        FoodDrink pepsi = new FoodDrink("Pepsi", 2.99, Global.itemtype.DRINK);
        FoodDrink lemmonade = new FoodDrink("Lemmonade", 2.99, Global.itemtype.DRINK);
        FoodDrink garlicbread = new FoodDrink("Garlic Bread", 4.99, Global.itemtype.STARTER);

        FoodDrink burger = new FoodDrink("burger", 7.99, Global.itemtype.MAIN);

        fullList.add(cola);
        fullList.add(pepsi);
        fullList.add(lemmonade);
        fullList.add(burger);
        fullList.add(garlicbread);



    }


    public ObservableList<FoodDrink> filterByType(Global.itemtype itemtype){
        ArrayList<FoodDrink> subList = new ArrayList<>();
        for (FoodDrink listItem : fullList){
            if(listItem.getItemtype().equals(itemtype)){
                subList.add(listItem);
            }
        }
        return FXCollections.observableArrayList(subList);
    }



    //plain old main method
    public static void main(String[] args) {
        //SelectDrinkController fbtd = new SelectDrinkController();
        //System.out.println(fbtd.filterByType("DRINK"));

        FoodDrinkController fdc = new FoodDrinkController();
        //System.out.println(fdc.filterByType(Global.itemtype.DRINK));

    }
}

【问题讨论】:

  • table.setRunningTotal(table.getRunningTotal() + selectedItem.getPrice());
  • 虽然如果 Table 有一个 addToRunningTotal(double price) 方法会更好。
  • @NomadMaker 非常感谢。出于测试目的,我现在只是试图将当前值打印到控制台,但它只是没有。我试过 System.out.println(tbl.getRunningTotal());但我只是得到一个巨大的错误?
  • 实际上我已经修复了这个问题,但它似乎并没有添加到实际运行总数中来测试它我打印了获取运行总数方法但即使我添加更多项目它也保持不变
  • 这看起来有点像作业。如果您对帮助您完成作业的语言有疑问,请提出(实际上“搜索”他们可能已经得到回答)。但是 Stackoverflow 不是来帮你做功课的。

标签: java javafx


【解决方案1】:

您的问题是每次添加条目时都会创建 Table 的另一个实例。

你想创建一次Table(我猜。)可能在SelectDrinkControllerGUI的构造函数中:

您已经在SelectDrinkControllerGUI 中有一个实例变量table,所以只需将您的构造函数更改为:

public SelectDrinkControllerGUI() {
    this.table = new Table();
}

然后更新addEntry(...):

public void addEntry(ActionEvent actionEvent){
    FoodDrink selectedItem = lvDrinks.getSelectionModel().getSelectedItem();
    fdc.order.add(selectedItem);

    table.setRunningTotal(table.getRunningTotal() + selectedItem.getPrice());

    System.out.println(table.getRunningTotal());

    System.out.println(fdc.order);
}

另外,您不需要"" + 来打印双打。做我上面做的:

System.out.println(tbl.getRunningTotal());

如果您仍有问题,请告诉我。

【讨论】:

  • 成功了!!谢谢你
  • 没问题!如果您愿意,您也可以接受@NomadMaker 的建议并创建一个addToRunningTotal(double price) 以使其更清洁。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-09
  • 1970-01-01
  • 2018-10-12
  • 2010-11-11
相关资源
最近更新 更多