package pr3; import java.text.*; public class Meal implements Comparable { private MainCourse mainCourse; private Drink drink; private SideOrder sideOrder; private Dessert dessert; private static DecimalFormat fmt = new DecimalFormat("0.00"); public Meal(MainCourse mainCourse, Drink drink, SideOrder sideOrder, Dessert dessert) { this.mainCourse = mainCourse; this.drink = drink; this.sideOrder = sideOrder; this.dessert = dessert; } public double getPrice() { return mainCourse.getPrice(); } public int getCalories() { return mainCourse.getCalories() + drink.getCalories() + sideOrder.getCalories() + dessert.getCalories(); } public int getTransFat() { return mainCourse.getTransFat() + drink.getTransFat() + sideOrder.getTransFat() + dessert.getTransFat(); } private String padRight(String s, int n) { while (s.length() < n) s = s + " "; return s; } private String padLeft(String s, int n) { while (s.length() < n) s = " " + s; return s; } private String padLeft(int val, int n) { return padLeft("" + val, n); } private String booleanString(boolean f, String trueString, String falseString) { if (f) return trueString; return falseString; } public int compareTo(Object obj) { Meal otherMeal = (Meal) obj; int myCal = getCalories(); int otherCal = otherMeal.getCalories(); if (myCal > otherCal) return 1; else if (myCal < otherCal) return -1; return 0; } public static String tableHeading() { return " price cal tr.fat main course drink(oz)" + " side order(org?) dessert(L,S)\n"; } public String toString() { StringBuffer sb = new StringBuffer(); sb.append(padLeft(fmt.format(getPrice()), 6)); sb.append(padLeft(getCalories(), 7)); sb.append(padLeft(getTransFat(), 8)); sb.append(" "); sb.append(padRight(mainCourse.getName(), 13)); sb.append(padRight(drink.getName() + "(" + drink.getSize() + ")", 13)); sb.append(padRight(sideOrder.getName() + booleanString(sideOrder.isOrganic(), "(Y)", "(N)"), 17)); sb.append(padRight(dessert.getName() + booleanString(dessert.isLarge(), "(L)", "(S)"), 12)); return sb.toString(); } }