简单java比萨饼订购程序

简单java比萨饼订购程序,java,Java,我在基本的比萨饼订购程序上遇到了问题。我的最终打印结果是订单总是超过100美元,我似乎无法理解为什么除了它与numberOfToppings变量有关之外,其他原因都与此有关。也许我错过了一些明显的东西,也许不是。谢谢你的帮助 这是密码 public static void main(String[] args) { DecimalFormat df = new DecimalFormat("#.##"); Scanner keyboard = new Scanner(System

我在基本的比萨饼订购程序上遇到了问题。我的最终打印结果是订单总是超过100美元,我似乎无法理解为什么除了它与
numberOfToppings
变量有关之外,其他原因都与此有关。也许我错过了一些明显的东西,也许不是。谢谢你的帮助

这是密码

public static void main(String[] args) {
    DecimalFormat df = new DecimalFormat("#.##");
    Scanner keyboard = new Scanner(System.in);

    //  Variables
    String firstName; // first name of user
    char crustType;
    String crust; // name of crust
    int inches; // pizza size
    double cost = 0.0; // pizza cost
    final double taxRate = 0.08; // amount tax owed
    double tax; // tax amount
    double total; // total of pizza + toppings
    double lastTotal; // total of everything
    int numberOfToppings = 0;
    String toppings = "Cheese";

    // Prompts for name & determines discount
    System.out.println("Enter your name: ");
    firstName = keyboard.nextLine();

    //Prompts for distance 
    double distance = 0;
    double deliveryfee = 0;
    System.out.println("Please enter total distance in miles from pizza shop (0 for in store pickup):");
    distance = keyboard.nextDouble();
    if (distance == 0) {
        deliveryfee = 0;
        System.out.println("There is no delivery fee.");
    } else if (distance > 1) {
        deliveryfee = ((distance * 0.5) + 2);
        System.out.println("Your delivery fee is: $" + df.format(deliveryfee));
    } else if (distance > 0) {
        deliveryfee = 2.00;
        System.out.println("Your delivery fee is: $" + df.format(deliveryfee));
    }

    // Prompts for pizza size
    System.out.print("What size of pizza would you like (diameter in inches)? (10,   12, 14, or 16) ");
    inches = keyboard.nextInt();
    if (inches == 10) {
        cost = 10.99;
    } else if (inches == 12) {
        cost = 12.99;
    } else if (inches == 14) {
        cost = 14.99;
    } else if (inches == 16) {
        cost = 16.99;
    } else if (inches != 10 && inches != 12 && inches != 14 && inches != 16) {
        System.out.println("The number you have entered is illegal, your pizza size will    be set to 12 inches. ");
        cost = 12;
    }
    keyboard.nextLine();

    // Prompts user for type of crust
    System.out.print("What type of crust do you want? (H)and-Tossed, (T)hin-crust, or (D)eep-dish (enter H, T, or D,): ");
    crustType = keyboard.nextLine().charAt(0);

    if (crustType == 'H' || crustType == 'h') {
        crust = "Hand-Tossed";
    } else if (crustType == 'T' || crustType == 't') {
        crust = "Thin-Crust";
    } else if (crustType == 'D' || crustType == 'd') {
        crust = "Deep-Dish";
    } else if (crustType != 'H' && crustType != 'h' && crustType != 'T' && crustType != 't' && crustType != 'D' && crustType != 'd') {
        System.out.println("The crust type you have entered is illegal, your crust type will be set to hand-tossed. ");
    }
    crust = "Hand-Tossed";

    // Prompts user for additonal toppings
    System.out.println("All pizzas come with cheese.");
    System.out.println("Additional toppings are $1.25 each, choose from Pepperoni or Sausage.");

    // Pepperoni
    System.out.println("Do you want Pepperoni? (Y/N)");
    numberOfToppings = keyboard.nextLine().charAt(0);
    if (numberOfToppings == 'Y' || numberOfToppings == 'y') {
        numberOfToppings = numberOfToppings + 1;
        toppings = toppings + " and Pepperoni";
    } else {
    }

    //Sausage
    System.out.println("Do you want Sausage? (Y/N)");
    numberOfToppings = keyboard.nextLine().charAt(0);
    if (numberOfToppings == 'Y' || numberOfToppings == 'y') {
        numberOfToppings = numberOfToppings + 1;
        toppings = toppings + " and Sausage";
    } else {
    }

    // Calculations
    System.out.println(cost);
    System.out.println(numberOfToppings);
    System.out.println(deliveryfee);
    total = (cost) + (numberOfToppings * 1.25) + (deliveryfee);
    tax = total * taxRate;
    lastTotal = total * (1 + taxRate);

    // Payment Confirmation
    System.out.println(firstName + ", here is your order:");
    System.out.println(inches + " inch pizza");
    System.out.println(crust + ", " + toppings);
    System.out.println("Order Cost: $" + df.format(total));
    System.out.println("Tax: $" + df.format(tax));
    System.out.println("Total Due: $" + df.format(lastTotal));
}

您使用numberOfToppings变量既是跟踪浇头数量的一种方法,也是捕获命令行输入的一种方法。如果用户在命令行中输入(例如)M,numberOfToppings的最终值将为“M”。解决方案是为输入使用不同的变量,例如:

int userInput = keyboard.nextLine().charAt(0);
if (userInput == 'Y' || userInput == 'y'){
...

每次有人输入字符时,您都要设置数字toppings

    int numberOfToppings = 0;
    numberOfToppings = 'Y' + 1;
    System.out.println(numberOfToppings);
它返回90,因为'Y'是一个字符,它被转换为int值。如果从以下位置更改代码:

numberOfToppings = keyboard.nextLine().charAt(0);
if (numberOfToppings == 'Y' || numberOfToppings == 'y' )
为此:

char character;
...
character = keyboard.nextLine().charAt(0);
if (character == 'Y' || character == 'y' )

它会起作用的。

给你。。这是代码。我帮你修好了。继续,只是复制粘贴这个并尝试它。它会起作用的

import java.text.DecimalFormat;
import java.util.Scanner;

public class pizzatest{
public static void main(String[] args){
DecimalFormat df = new DecimalFormat("#.##");
Scanner keyboard = new Scanner(System.in);

//  Variables
String firstName; // first name of user
char crustType; 
String crust; // name of crust
int inches; // pizza size
double cost = 0.0; // pizza cost
final double taxRate = 0.08; // amount tax owed
double tax; // tax amount
double total; // total of pizza + toppings
double lastTotal; // total of everything
int numberOfToppings = 0;
int numberOfToppings2 =0;
int numberOfToppings3;
String toppings = "Cheese";

// Prompts for name & determines discount
System.out.println("Enter your name: " );
firstName = keyboard.nextLine();

//Prompts for distance 
double distance = 0;
double deliveryfee = 0;
System.out.println("Please enter total distance in miles from pizza shop (0 for in store pickup):");
distance = keyboard.nextDouble();
if (distance == 0){
deliveryfee = 0;
System.out.println("There is no delivery fee.");}
else if (distance > 1){
deliveryfee = ((distance * 0.5) +2);
System.out.println("Your delivery fee is: $" + df.format(deliveryfee));}
else if (distance > 0){
deliveryfee = 2.00;
System.out.println("Your delivery fee is: $" + df.format(deliveryfee));}


// Prompts for pizza size
System.out.print("What size of pizza would you like (diameter in inches)? (10,   12, 14, or 16) " );
inches = keyboard.nextInt();
if (inches == 10 ){
cost = 10.99; }
else if (inches == 12){
cost = 12.99;}
else if (inches == 14){
cost = 14.99;}
else if (inches == 16){
cost = 16.99;}
else if (inches != 10 && inches != 12 && inches != 14 && inches != 16){
System.out.println("The number you have entered is illegal, your pizza size will    be set to 12 inches. " );
cost = 12;}
keyboard.nextLine();

// Prompts user for type of crust
System.out.print("What type of crust do you want? (H)and-Tossed, (T)hin-crust, or (D)eep-dish (enter H, T, or D,): " );
crustType = keyboard.nextLine().charAt(0);

if (crustType == 'H' || crustType == 'h' ){
crust = "Hand-Tossed";}
else if (crustType == 'T' || crustType == 't' ){
crust = "Thin-Crust";}
else if (crustType == 'D' || crustType == 'd' ){
crust = "Deep-Dish";}
else if (crustType != 'H' && crustType != 'h' && crustType != 'T' && crustType    != 't' && crustType != 'D' && crustType != 'd' ){
System.out.println("The crust type you have entered is illegal, your crust type will be set to hand-tossed. " );}
crust = "Hand-Tossed";

// Prompts user for additonal toppings
System.out.println("All pizzas come with cheese." );
System.out.println("Additional toppings are $1.25 each, choose from Pepperoni or Sausage." );

// Pepperoni
System.out.println("Do you want Pepperoni? (Y/N)" );
numberOfToppings = keyboard.nextLine().charAt(0);
if (numberOfToppings == 'Y' || numberOfToppings == 'y' ){
numberOfToppings = 1;
toppings = toppings + " and Pepperoni";}
else{
numberOfToppings = 0;
}

//Sausage
System.out.println("Do you want Sausage? (Y/N)" );
numberOfToppings2 = keyboard.nextLine().charAt(0);
if (numberOfToppings2 == 'Y' || numberOfToppings2 == 'y' ){
numberOfToppings2 = 1;
toppings = toppings + " and Sausage";}
else{
numberOfToppings2 = 0;} 


numberOfToppings3 = (numberOfToppings) + (numberOfToppings2);

// Calculations
total = (cost) + (numberOfToppings3 * 1.25) + (deliveryfee);
tax = total * taxRate;
lastTotal = total * ( 1 + taxRate );

// Payment Confirmation
System.out.println(firstName + ", here is your order:"); 
System.out.println(inches + " inch pizza");
System.out.println(crust +", " + toppings);
System.out.println("Order Cost: $" + df.format(total));
System.out.println("Tax: $" + df.format(tax));
System.out.println("Total Due: $" + df.format(lastTotal));
    }
   }

首先,正确格式化代码。然后调试你的程序,试着理解为什么它不能像你想要的那样工作。所以不是“为我调试难看的代码”服务。我们很乐意回答具体的问题。这个代码有很多问题(请正确格式化)。你的if块很奇怪。在许多情况下,您会隐式地在int和double之间来回转换,因此可能会丢失精度。我还发现了一些逻辑错误。调试代码,如果遇到错误,请返回。我们不是调试服务。