2017-10-19 14 views
0

私のプログラムは、ドライバクラス1つ、ピザクラス1つ、注文価格を計算する注文クラスの3つのクラスでほぼ完了しています。私の唯一の問題は、コードを実行すると変数がwhileループを介してピザクラスのinputToppingsメソッドで設定され、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を除く)。 while(true)は許容できないプログラミング方法ですが、無限ループにつながる可能性があります。ブーリアンフラグを提供する方が良いですし、フラグの値が変更されたら終了してください。

関連する問題