2017-10-19 36 views
0

J'ai mon programme presque terminé où ils sont trois classes: une classe de conducteur, une classe de pizza, et une classe de commande qui calcule le prix de la commande. Mon seul problème est une fois que j'exécute mon code les variables passeront par la boucle while dans la méthode inputToppings de la classe pizza et imprimeront les bonnes valeurs quand la méthode toString sera appelée dans la classe pizza de la classe de commande mais dans ma méthode getToppingQuantity il transmet les valeurs par défaut pour les variables d'instance. Où vais-je me tromper ici?variables retournant à la valeur par défaut

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 

ici est la classe de commande

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; 
} 
} 

et enfin la classe pilote

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"); 

} 
} 

comme je l'ai dit mon programme passe par les étapes correctement, mais renvoie la valeur erronée pour les variables Topping dans la méthode getToppingQuantity (Remarque: je n'ai pas inclus la classe client car elle ne correspond pas à mon numéro actuel)

Répondre

0

Dans votre classe Order, vous avez une variable d'instance Pizza, mais dans votre PizzaDriver vous créez et utilisez un autre objet Pizza. C'est probablement la cause première de vos problèmes. (Tu fais aussi la même chose avec la classe Customer.)

Cela signifie que

System.out.println("\n Your pizza contains the following toppings: \n" 
+ pizza01.toString()); 

... et ...

order01.displaySummary(); 

référence à différentes Pizza objets.

0

Votre bloc while (true) dans inputToppings() n'autorisera jamais la sortie de la condition while (sauf dans le break que vous avez fourni pour quitter. Non que while (true) soit une pratique de programmation inacceptable, mais cela peut conduire à des boucles infinies. Mieux vaut fournir un drapeau booléen, puis quitter une fois que la valeur du drapeau a changé.