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