Java中的方法计算/参数

Java中的方法计算/参数,java,methods,Java,Methods,我必须创建一个虚拟咖啡店,在那里用户输入他们的订单号,他们想要多少订单,计算小计和折扣,等等。整个过程分为不同的方法。大多数方法都非常简单,但我在computeSubTotal方法方面遇到了问题。我必须在main方法中初始化subtotal才能使其工作,但是当在computeSubTotal中计算小计时,它总是以零结束。抱歉,如果这看起来很愚蠢,但我不知道我做错了什么,帮帮忙 import java.util.Scanner; public class CoffeeShopWithMethods

我必须创建一个虚拟咖啡店,在那里用户输入他们的订单号,他们想要多少订单,计算小计和折扣,等等。整个过程分为不同的方法。大多数方法都非常简单,但我在computeSubTotal方法方面遇到了问题。我必须在main方法中初始化subtotal才能使其工作,但是当在computeSubTotal中计算小计时,它总是以零结束。抱歉,如果这看起来很愚蠢,但我不知道我做错了什么,帮帮忙

import java.util.Scanner;
public class CoffeeShopWithMethods
{
    public static void main(String[] args)
    {
        Scanner user_input = new Scanner (System.in);
        String user_name;
        System.out.print("\nPlease enter your name: ");
        user_name = user_input.next();
        System.out.println("\nWelcome to the Java Byte Code Coffee Shop, " + user_name + "!");

        int orderNumber = 0;
        int orderQuan = 0;
        double subTotal = 0.0;

        //Beginning of calls to methods
        displayMenu();
        getItemNumber(orderNumber);
        getQuantity(orderQuan);
        computeSubTotal(orderNumber, orderQuan, subTotal);
        discountCheck(subTotal);
    }

    public static void displayMenu()
    {
        System.out.println("\nHere is our menu: \n" + "\n 1. Coffee $1.50" + "\n 2. Latte   $3.50" + "\n 3. Cappuccino  $3.25" + "\n 4. Espresso    $2.00");
    }

    public static int getItemNumber(int orderNumber)    //prompts user for item number (1 for coffee, 2 for latte, etc...)
    {
        Scanner user_input = new Scanner(System.in);
        System.out.print("\nPlease enter the item number: ");
        orderNumber = user_input.nextInt();

        final double Coffee = 1.50;
        final double Latte = 3.50;
        final double Cappuccino = 3.25;
        final double Espresso = 2.00;
        double Cost = 0;

        if (orderNumber == 1)
            Cost = Coffee;
        if (orderNumber == 2)
            Cost = Latte;
        if (orderNumber == 3)
            Cost = Cappuccino;
        if (orderNumber == 4)
            Cost = Espresso;

        return orderNumber;
    }

    public static int getQuantity(int orderQuan)
    {
        Scanner user_input = new Scanner(System.in);
        System.out.print("\nPlease enter the quantity: ");
        orderQuan = user_input.nextInt();
        return orderQuan;
    }

    public static double computeSubTotal(int orderNumber, int orderQuan, double subTotal)
    {
        subTotal = (orderNumber * orderQuan);
        System.out.print("Your total before discount and tax is: $" + subTotal);
        return subTotal;
    }

    public static boolean discountCheck(double subTotal)    //takes subtotal and returns true if user earned a discount (over $10)
    {
        if (subTotal >= 10.00)
            return true;
        else
            return false;
    }
}
computeSubTotal
方法中,您可以

subTotal = (orderNumber * orderQuan);
这不会初始化main方法中的变量;您正在初始化参数变量

在你的主要方法中,你应该

subTotal = computeSubTotal(orderNum, orderQuan);
而不是在不使用返回值的情况下调用方法。您可能已经注意到,我没有将
subTotal
传递给该方法。这是不必要的。您可以在方法内重新声明变量:

public static double computeSubTotal(int orderNumber, int orderQuan)
    {
        double subTotal = (orderNumber * orderQuan);
        System.out.print("Your total before discount and tax is: $" + subTotal);
        return subTotal;
    }

这也适用于其他变量。Java是按值传递的,因此如果将值传递给方法,则会为该方法创建一个新的引用(当您声明方法时在方法的参数中执行
int varName

您的方法
getItemNumber
getQuantity
computeSubTotal
discountCheck
都返回一个值,但您没有将该返回值存储在main方法中

除此之外,您的
getItemNumber()
方法仅在本地存储成本,该成本在方法完成时会被丢弃-应该返回成本(并且该方法可能会被重命名)

您可能应该有如下内容:

//Beginning of calls to methods
displayMenu();
double itemCost = getItemCost();  // was getItemNumber()
orderQuan = getQuantity(orderQuan);
subTotal = computeSubTotal(itemCost, orderQuan);
boolean shouldDiscount = discountCheck(subTotal);
当然,要使用面向对象的方法,变量应该是类的成员,这样就不需要传递或返回值——类中的所有方法都可以访问它们

//Beginning of calls to methods
displayMenu();
double itemCost = getItemCost();  // was getItemNumber()
orderQuan = getQuantity(orderQuan);
subTotal = computeSubTotal(itemCost, orderQuan);
boolean shouldDiscount = discountCheck(subTotal);