Question: Hi , Need Help with this Java exercise. Please let me know if you want more info. There is two files provided. project is in

Hi , Need Help with this Java exercise. Please let me know if you want more info.

Hi , Need Help with this Java exercise. Please let me know

There is two files provided. project is in Eclispe.

THIS is coffee.java package patt.Coffee; import java.util.ArrayList; public class Coffee { String type; double cost; ArrayList ingredients; public Coffee(ArrayList ingredients, String type) { this.type = type; this.ingredients = ingredients; double sum = 0; for (String ingredient : ingredients) { if (ingredient == "espresso") { sum += 0.5; } else if (ingredient == "milk") { sum += 1.0; } else if (ingredient == "chocolate") { sum += 1.5; } else { sum += 0; } } this.cost = sum; } public double getCost() { return cost; } public double getPrice() { if (this.type.equals("long black")) { return 4.0; } else if (this.type.equals("flat white")) { return 5.0; } else if (this.type.equals("mocha")) { return 6.0; } return 0; } public String listIngredients() { String string = ""; for (String ingredient : ingredients) { string += ingredient; string += " "; } return string; } }

_____________This is CoffeeEnums.java___________

package patt.Coffee; public class CoffeeEnums { public static enum Type { LONG_BLACK(4.0), FLAT_WHITE(4.75), MOCHA(5.5); private double price; Type(double price) { this.price = price; } public double getPrice() { return price; } } public static enum Ingredient { ESPRESSO(0.5), MILK(1), CHOCOLATE(1.5); private double cost; Ingredient(double cost) { this.cost = cost; } public double getCost() { return cost; } } }

Susan owns a caf and hired a programmer to build a system for her baristas to enter customer orders and maintain inventory. One of the classes the programmer has written as part of the larger system is cottee (provided). You should inspect this class yourself to understand how it works. Note that "cost" refers to the ingredient cost on Susan's behalf, and "price" refers to the price a customer pays for a particular coffee. After Susan took one look at the class, she fired the programmer and hired you to refactor it. This class uses a lot of bad practice. Most notably, it relies on the usage of strings. For instance, when interfacing with coffee, a long black has to be constructed like: Array.iatestring> ingredientnew Arrayistestring>) ingredients.add"espre8so ingredients.add"eepresso" Coffee c ew Coffee(ingredients, "long black) Although this works, if one of the strings in the construction were anything but exactly what they are, there would be an error, or worse, the price or cost could be calculated incorrectly. Using enums, we can restrict the parameters to a select few. Susan wrote the class coffeeEnums to help you get started. In Eclipse, right click cofteeRnums.java , select Refactor -> Rename... , and change the name to cotteeFactory (because we will be using the factory pattern later). This tool will automatically update all references, so it's very handy when you want to rename files, variables, methods, etc. With these enums, we can now change the constructor signature to public Coffee(ArrayLiat ingredienta, Type type) Notice how we are now using Type and Ingredient (the enums in coffeeFactory). This will break the class and cause a number of compiler errors! Eclipse will suggest automatic fixes to some of these problems that you should activate, such as: Importing the enums. Renaming field types to use the enum types. . There will still be some errors remaining. You will need to make the following changes: Change getrice to return the price based on the stored Type. This only needs to be one line! .Change getcostoto return the cost based on the stored Ingredient collection. You can use the getter method available to you in the enum to radically simplify the summation. o o Calculating the cost should be extracted from the constructor to the method getCost(). It's good practice to extract behaviour to singularly purposeful and self-contained methods in order to produce more readable code. Because the ingredients are not being directly stored as strings, you will need to change 1istIngredient while keeping the output in a new-line separated structure. Hint:enums can be converted to strings with tostring,but they will be implicitly casted to strings anyway. to use enums, which has made the construction and implementation of the class more logical. Previously, we had to instantiate a We have now refactored Cottee object like so: coffee ArrayList ingredientsnew ArrayList ingrodients.add "espresso" ingrodients.add( "milk" Coffee flathitenew Coffeeingredients, "flat white Now we can do it like so: ArrayLiat

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!