2017-10-19 165 views
0

我的程序已經接近完成,它們有三個類:一個驅動程序類,一個比薩類和計算訂單價格的訂單類。我唯一的問題是,一旦我運行我的代碼,變量將通過比較類的inputToppings方法中的while循環設置,並且將在從訂單類中的比薩類調用toString方法但在我的getToppingQuantity方法中打印正確的值它傳遞實例變量的默認值。我在哪裏錯了?變量恢復爲默認值

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 

這裏是爲了類

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

,最後是驅動程序類

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

} 
} 

就像我說我的程序經過正確的步驟,但返回摘心變量的值不正確在getToppingQuantity方法(注意:我沒有包含客戶類,因爲它不涉及我目前的問題)

回答

0

在您的Order類中,您有一個Pizza實例變量,但在您的PizzaDriver中,您正在創建並使用不同的Pizza對象。這可能是你問題的根源。 (你也做與Customer類同樣的事情。)

這意味着

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

......還有......

order01.displaySummary(); 

指不同Pizza對象。

0

您在inputToppings()中的while(true)塊永遠不會允許從while條件退出(您提供的退出break除外)。雖然(真)是不可接受的編程習慣,但它可能會導致無限循環。最好提供一個布爾標誌,然後在標誌值改變時退出。