I have my program nearly done where their are three classes: one driver class, one pizza class, and an order class that calculates the order price. My only issue is once I run my code the variables will set through the while loop in the inputToppings
method of the pizza class and will print the correct values when the toString
method is called from the pizza class in the order class but in my getToppingQuantity
method it's passing the default values for the instance variables. Where am I going wrong here?
package edu.ilstu;
import java.util.Scanner;
public class Pizza
{
//default pizza is cheese and tomato sauce only
private int alfredo = 0;
private int pesto = 0;
private int tomato = 1;
private int sausage = 0;
private int pepperoni = 0;
private int onion = 0;
private int mushroom = 0;
private int greenPepper = 0;
private int cheese=1;
private char choice;
public int getCheese() {
return cheese;
}
public int getAlfredo()
{
return alfredo;
}
public void setAlfredo()
{
alfredo=1;
pesto=0;
tomato=0;
}
public int getPesto()
{
return pesto;
}
public void setSausage(int sausage)
{
this.sausage = sausage;
}
public void setPepperoni(int pepperoni)
{
this.pepperoni = pepperoni;
}
public void setOnion(int onion)
{
this.onion = onion;
}
public void setMushroom(int mushroom)
{
this.mushroom = mushroom;
}
public void setGreenPepper(int greenPepper)
{
this.greenPepper = greenPepper;
}
public void setCheese(int cheese)
{
this.cheese = cheese;
}
public void setPesto()
{
pesto=1;
tomato=0;
alfredo=0;
}
public int getTomato()
{
return tomato;
}
public void setTomato()
{
tomato=1;
pesto=0;
alfredo=0;
}
public int getSausage()
{
return sausage;
}
public int getPepperoni()
{
return pepperoni;
}
public int getOnion()
{
return onion;
}
public int getMushroom()
{
return mushroom;
}
public int getGreenPepper()
{
return greenPepper;
}
public void inputToppings() {
Scanner sc = new Scanner (System.in);
while (true) {
System.out.println("Input toppings. Enter Q to quit");
System.out.println("1. Sausage");
System.out.println("2. Pepperoni");
System.out.println("3. Onion");
System.out.println("4. Mushroom ");
System.out.println("5. Green Pepper");
System.out.println("6. Cheese");
System.out.println("7. Alfredo");
System.out.println("8. Pesto");
System.out.println("9. Tomato");
if (choice == 'q' || choice == 'Q') {
break;
}
if (choice == '1') {
addSausage();
}
if (choice == '2') {
addPepperoni();
}
if (choice == '3') {
addOnion();
}
if (choice == '4') {
addMushroom();
}
if (choice == '5') {
addGreenPepper();
}
if (choice == '6') {
addCheese();
}
if (choice == '7') {
if(alfredo != 1) {
setAlfredo();
}
else
System.out.println("No double sauce allowed");
}
if (choice == '8'){
if (pesto != 1) {
setPesto();
}
else
System.out.println("No double sauce allowed");
}
if (choice == '9') {
if(tomato != 1) {
setTomato();
}
else
System.out.println("No double sauce allowed");
}
choice = sc.next().charAt(0);
}//end while loop
sc.close();
}//end of inputToppings method
public void addCheese() {
if(cheese<2) {
setCheese(cheese+1);
}
else
System.out.println("Invalid input");
}
public void addPepperoni() {
if (pepperoni<2) {
setPepperoni(pepperoni+1);
}
else
System.out.println("Maximum ammount of topping exceeded");
}
public void addSausage() {
if(sausage<2) {
setSausage(sausage+1);
}
else
System.out.println("Maximum ammount of topping exceeded");
}
public void addOnion() {
if(onion<2) {
setOnion(onion+1);
}
else
System.out.println("Maximum ammount of topping exceeded");
}
public void addGreenPepper() {
if(greenPepper<2) {
setGreenPepper(greenPepper+1);
}
else
System.out.println("Maximum ammount of topping exceeded");
}
public void addMushroom() {
if(mushroom<2) {
setMushroom(mushroom+1);
}
else
System.out.println("Maximum ammount of topping exceeded");
}
public String toString() {
String str ="sausage = " + Integer.toString(sausage) + " Pepperoni = " + Integer.toString(pepperoni) + "\n" + "Onion = " + Integer.toString(onion) + " Mushroom = " + Integer.toString(mushroom) +"\n" + "cheese = " + Integer.toString(cheese) +"\n" + "Tomato = " + Integer.toString(tomato) + " Pesto = " + Integer.toString(pesto) + " Alfredo = " + Integer.toString(alfredo);
return str;
}
public int getToppingQuantity() {
return sausage+pepperoni+onion+mushroom+cheese;
}
}//end of class
here is the order class
public class Order
{
final double TAX_RATE = 0.075;
final double BASE_PRICE = 5.00;
final double TOPPING_CHARGE = 0.75;
final double DELIVERY_CHARGE = 0.10;
public char typeOfOrder;
public String storeLocation = "";
Pizza pizza1 = new Pizza();
Customer cust1 = new Customer();
public double calculateSubtotal() {
double toppingPrice = (pizza1.getToppingQuantity()*TOPPING_CHARGE);
return BASE_PRICE+toppingPrice;
}
public double calculateSalesTax() {
return calculateSubtotal()*TAX_RATE;
}
public double calculateDeliveryCharge() {
return (calculateSubtotal() + calculateSalesTax()) * DELIVERY_CHARGE;
}
public void displaySummary() {
if (typeOfOrder=='d' || typeOfOrder=='D') {
System.out.printf("Subtotal $%.2f\n", calculateSubtotal());
System.out.printf("Sales Tax: $%.2f\n", calculateSalesTax());
System.out.printf("Delivery Charge: $%.2f\n", calculateDeliveryCharge());
System.out.printf("Total: $%.2f\n", calculateSubtotal() + calculateSalesTax() + calculateDeliveryCharge());
System.out.println(pizza1.getToppingQuantity());
System.out.println("Thank you, come again!");
}
else if (typeOfOrder == 'p' || typeOfOrder == 'P') {
System.out.println(storeLocation);
System.out.printf("Subtotal $%.2f\n", calculateSubtotal());
System.out.printf("Sales Tax: $%.2f\n", calculateSalesTax());
System.out.printf("Total: $%.2f\n", calculateSubtotal() + calculateSalesTax());
System.out.println("Thank you, come again!");
}
}
public char getTypeOfOrder()
{
return typeOfOrder;
}
public void setTypeOfOrder(char typeOfOrder)
{
this.typeOfOrder = typeOfOrder;
}
public String getStoreLocation()
{
return storeLocation;
}
public void setStoreLocation(String storeLocation)
{
this.storeLocation = storeLocation;
}
}
and finally the driver class
public class PizzaDriver
{
public static void main(String[] args) {
Customer cust01= new Customer();
Order order01 = new Order();
Pizza pizza01 = new Pizza();
Scanner sc = new Scanner(System.in);
System.out.println("Welcome to ILSTU Pizza");
System.out.println("Step 1: Is this for a pickup or delivery?");
System.out.println("1 Pickup");
System.out.println("2 Delivery");
int choice = sc.nextInt();
System.out.println("Choice: " + choice);
if (choice==1) {
order01.setTypeOfOrder('p');
System.out.println("1. 207 W. North St, Normal, IL");
System.out.println("2. 208 Landmark Dr, Bloomington, IL");
System.out.println("3. 1600 W. Market St, Bloomington, IL");
System.out.println("Which location would you like to pickup from?");
choice=sc.next().charAt(0);
if (choice=='1') {
order01.setStoreLocation("207 W. North St, Normal, IL");
}
else if (choice=='2') {
order01.setStoreLocation("208 Landmark Dr, Bloomington, IL");
}
else if (choice=='3') {
order01.setStoreLocation("1600 W. Market St, Bloomington, IL");
}
else
System.out.println("invalid choice");
System.out.println("At this stage would you like to quit this order entry process? \n Enter 'Y' to quit or 'N' to continue on to build your pizza.");
choice=sc.next().charAt(0);
if (choice=='N'|| choice == 'n') {
pizza01.inputToppings();
System.out.println("Your pizza contains the following toppings: \n" + pizza01.toString());
order01.displaySummary();
}
else if(choice == 'Y' || choice == 'y') {
System.out.println("Thank you, come again!");
}
}
else if (choice == '2') {
//System.out.println("Step 2: Customer Information");
order01.setTypeOfOrder('d');
sc.nextLine();
System.out.println("Please enter your first and last name: \n");
cust01.setFullName(sc.nextLine());
System.out.println("Please enter your street address");
cust01.setAddress(sc.nextLine());
System.out.println("Please enter your city, state and zip code");
cust01.setCityStateZip(sc.nextLine());
System.out.println("Please enter your phone number (10-dights only)");
String userNumber=sc.nextLine();
while(true) {
if (userNumber.length()==10) {
cust01.setPhoneNumber(userNumber);
break;
}
else if (userNumber.length()!=10) {
System.out.println("Invalid phone number, Enter a valid one");
}
userNumber=sc.nextLine();
}
System.out.println(cust01.toString()+"\n");
System.out.println("At this stage would you like to quit this order entry process? \n Enter 'Y' to quit or 'N' to continue on to build your pizza.");
choice=sc.next().charAt(0);
if (choice=='N'|| choice == 'n') {
pizza01.inputToppings();
System.out.println("\n Your pizza contains the following toppings: \n" + pizza01.toString());
order01.displaySummary();
}
else if(choice == 'Y' || choice == 'y') {
System.out.println("Thank you, come again!");
}
}
else
System.out.println("invalid choice");
}
}
like I said my program goes through the steps properly but returns the wrong value for the topping variables in the getToppingQuantity method (Note: I didn't include the customer class because it doesn't pertain to my current issue)
In your Order
class you have a Pizza
instance variable, but in your PizzaDriver
you're creating and using a different Pizza
object. This is likely the root cause of your issues. (You're also doing the same thing with the Customer
class.)
This means that
System.out.println("\n Your pizza contains the following toppings: \n"
+ pizza01.toString());
...and...
order01.displaySummary();
Refer to different Pizza
objects.