需要编码之神的指导时刻,告诉我如何让我的代码做我需要它做的事情。
所以情况是:我需要告诉程序运行票价乘以购买的门票数量的计算。似乎很容易?但是- 这在前面有三个变量。
见下文:
int TicketType = 0;
double ChildTicket = 18.00;
double AdultTicket = 36.00;
double SeniorTicket = 32.50;
int TicketQuantity = 0;
double TotalCost = ?
本质上 - 我需要从伪代码级别发生什么才能使这更容易:
Compute TotalCost = Result of ticket type (ChildTicket,AdultTicket or SeniorTicket) * TicketQuantity
任何帮助都会很棒! :)
您可以使用switch
语句来找出TicketType
(儿童,成人,老年人),从而找出单张票的price
:
double price;
switch(TicketType){
case 1:
price = ChildTicket;
break;
case 2:
price = AdultTicket;
break;
case 3:
price = SeniorTicket;
break;
default:
// use default value for price or throw an error
}
然后将该price
乘以TicketQuantity
得到TotalCost
:
double TotalCost = price * TicketQuantity;
注意:Java 命名约定说,变量应始终以小写字母开头,因此
TotalCost
更喜欢totalCost
等。
您可以将变量作为值存储到双精度数组中,然后可以使用 TicketType 中的索引访问该值。就像这样:
int TicketType = 0;
double ticketsValues[] = [18.00,32.00,32.50]; //The first position is ChildTicket, the 2nd AdultTicket and so..
int TicketQuantity = 0;
double TotalCost = ticketsValue[TicketType] * TicketQuantity;//Here you access to the value depending on the TicketType.
我建议使用带有构造函数的枚举,例如
public enum Ticket{
SENIOR(7.0), ADULT(10.0), CHILD(3.0);
Ticket(double price) {
this.price = price;
}
private final double price;
public double getPrice() {
return price;
}
}
有不同的方法可以解决这个问题。
我建议为不同类型的票创建一个Enum
。
public enum TicketType {
SENIOR(32.50D),
ADULT(36.00D),
CHILD(18.00D);
private final double price;
TicketType(double price) {
this.price = price;
}
public double getPrice() {
return price;
}
public double getCalculatedPrice(int ticketAmount) {
return price * ticketAmount;
}
}
取而代之的是,您也可以尝试这种方式
int ticketType = 0; //change
double[] prices = {32.50D, 36.00D, 18.00D}; //Senior, Adult, Child
int ticketQuantity = 0; //change
int totalCost = prices[ticketType] * ticketQuantity;
您应该检查ticketType
是否大于或小于prices
大小以避免ArrayIndexOutOfBoundsException
。您还应该检查数量是否不小于零。
由于年龄组(老年人,成人,儿童)不应该改变,因此定义枚举(TicketType
)是合适的,就像其他答案建议的那样。但是由于价格可能会发生变化,我不会在枚举中对它们进行硬编码。我建议使用地图:
Map<TicketType, Double> prices = new EnumMap<>(TicketType.class);
prices.put(TicketType.CHILD, ChildTicket);
prices.put(TicketType.ADULT, AdultTicket);
prices.put(TicketType.SENIOR, SeniorTicket);
地图可以填充从数据源读取的价格,并在每次价格变化时更新。
例如,获取成人的价格只需调用:
double adultPrice = prices.get(TicketType.ADULT);
或更一般:
public double getPriceFor(TicketType type) {
return prices.get(type) ;
}
回答您问题的最后一部分。总成本可以按如下方式计算:
public double getTotalCost(int children, int adults, int seniors) {
return getPriceFor(TicketType.CHILD) * children +
getPriceFor(TicketType.ADULT) * adults+
getPriceFor(TicketType.SENIOR) * seniors;
}
使用枚举,如下所示:
public enum TicketType {
ADULT(36), CHILD(18), SENIOR(32,50);
private final int cost;
TicketType(int cost) { this.cost = cost; }
public int getValue() { return cost; }
}
public int getTotalPrice(TicektType tp, int quantity){
return tp.getValue() * quantity;
}
这就是我最终所做的。步骤 1 在初始化中添加了其他选项
double Option1 = ChildTicket;
double Option2 = AdultTicket;
double Option3 = SeniorTicket;
THEN - 在需要信息和结果的实际代码中,创建了一个 if 语句的迷你系列以与正确的选项相关联:
if (TicketType == 1) {
System.out.println ("Child tickets are $18.00,How many would you like to purchase?");
TicketQuantity =input.nextInt();
TotalCost = Option1 * TicketQuantity;
System.out.println ("Total Cost of tickets = $" + (TotalCost));
System.out.println ("Press 1 to confirm");
Confirmation = input.nextInt();
对于初学者来说还不错