我的程序几乎完成了三个类:一个驱动程序类,一个比萨类和一个计算订单价格的订单类。我唯一的问题是,一旦我运行我的代码,变量将通过比萨类的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 :(得分:0)
inputToppings()中的while(true)块永远不会允许退出while条件(除了你提供的break
退出。不是说while(true)是一种不可接受的编程习惯,但是它可以导致无限循环。最好提供一个布尔标志,然后在标志值改变后退出。
答案 1 :(得分:0)
在Order
课程中,您有一个Pizza
实例变量,但在PizzaDriver
中,您需要创建并使用其他Pizza
对象。这可能是您问题的根本原因。 (你也在使用Customer
类做同样的事情。)
这意味着
System.out.println("\n Your pizza contains the following toppings: \n"
+ pizza01.toString());
...和...
order01.displaySummary();
请参阅不同的Pizza
个对象。