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)