我正在填写一份计算预订日期的表格。 在周五和周六,一间客房的费用为150美元,而在其他日子则为120美元。我使用了while循环来进行设置,但是由于某种原因,它一直在计算错误的价格。
应该是什么样子
它是什么样的:
这是我的代码:
int nights = 0;
int price = 0;
private void btnCalculate_Click(object sender, EventArgs e)
{
DateTime arrivalDate = DateTime.Parse(txtArrivalDate.Text);
DateTime departureDate = DateTime.Parse(txtDepartureDate.Text);
TimeSpan ts = departureDate.Subtract(arrivalDate);
nights = ts.Days;
while (arrivalDate != departureDate)
{
DayOfWeek dow = arrivalDate.DayOfWeek;
if (dow == DayOfWeek.Friday ||
dow == DayOfWeek.Saturday)
{
price = 150;
}
else
{
price = 120;
}
arrivalDate = arrivalDate.AddDays(1);
}
txtNights.Text = nights.ToString();
int totalPrice = price * nights;
txtTotalPrice.Text = totalPrice.ToString();
int average = totalPrice / nights;
txtAvgPrice.Text = average.ToString();
txtArrivalDate.Focus();
}
答案 0 :(得分:5)
简而言之,int totalPrice = price * nights;
该行应删除,而在while循环中,price += 120
或price += 150
在每种情况下均应删除。 totalPrice
可以简单地替换为price
。
您没有使用while循环中设置的price
。 price
设置为120或150,但随后被下一个值覆盖(先前的值被完全忽略)。因此,一旦您的代码退出了while循环,就会使用最新的price
集并将其乘以总住宿天数。
因此,您的代码正在执行的操作是获取最后一天的price
(在这种情况下为2016年2月1日),然后乘以总夜晚数。它应该做的是在循环内保持price
的总运行量。
答案 1 :(得分:-3)
您没有对price
做任何事情。
它应该在while循环中使用。
此外,您应该使用.TotalDays
,而不是.Days
。
类似的东西:
public static (decimal price, int nights) GetPrice
(DateTime arrivalDate, DateTime departureDate)
{
//This code assumes there is no time component in the dates provided
if(departureDate < arrivalDate )
{
throw new ArgumentException("Arrival after Departure");
}
if (departureDate.Date == arrivalDate.Date)
{
//TODO
return (0, 0);
}
Decimal totalPrice = 0;
DateTime day = arrivalDate;
while (day != departureDate)
{
totalPrice += GetRate(day.DayOfWeek);
day = day.AddDays(1);
}
return (totalPrice, (int)(departureDate - arrivalDate).TotalDays);
}
private static decimal GetRate(DayOfWeek dow)
{
return (dow == DayOfWeek.Friday || dow == DayOfWeek.Saturday)
? 150
: 120;
}