目前正在写一个简单的预订。现在我有一个多维字符串数组,用于保存乘客姓名,我正在尝试遍历该数组并查看是否有任何未打开的座位,以便我知道是否将它们添加到等候名单中。
// Check how many seats are taken
for (int i = 0; i <= nameArray.GetUpperBound(0); i++)
{
for (int j = 0; j <= nameArray.GetUpperBound(1); j++)
{
if (nameArray[i, j] == "")
{
seatsFilled--;
}
else
{
seatsFilled++;
}
}
}
由于某些原因,当我调试时,我注意到这一行
if (nameArray[i, j] == "")
尽管数组中没有名称,但根本没有做任何事情并被跳过。我不能为我的生活找出原因。有什么建议吗?
答案 0 :(得分:1)
我可以看到的原因之一是比较可能有空格。试试这个
if(string.IsNullOrWhiteSpace(nameArray[i, j]))
答案 1 :(得分:1)
我会做这样的事情:
首先,我将创建一些定义座位结构的接口和模型。确保考虑到座位限制。
public interface ISeat
{
int RowNumber { get; }
string SeatLetter { get; }
PassangerModel Passenger { get; }
}
我们希望根据乘客的年龄和身高限制部分座位。进入每个座位的硬编码是令人讨厌的,所以我创建了一个SeatRestriction类,其中包含谓词。该谓词将采用乘客模型并返回结果。因此,例如,您可以创建一个SeatRestriction,检查乘客的身高或年龄,以确保他们可以打开紧急门。
public class SeatRestriction
{
public Predicate<PassangerModel> Restriction { get; private set; }
public SeatRestriction(Predicate<PassangerModel> restriction)
{
Restriction = restriction;
}
}
乘客模型实际上可能比这更冗长。我假设这里没有饮食需求。也许这是Spirit Airlines的预订系统。
public class PassangerModel
{
public string Title { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
public string Gender { get; set; }
public string StreetAddress { get; set; }
public string City { get; set; }
public string State { get; set; }
public string ZipCode { get; set; }
public string CreditCardName { get; set; }
public string CreditCardNumber { get; set; }
public string CreditCardExpiration { get; set; }
public string CreditCardSecurityPin { get; set; }
}
接下来我们来到座位班。该课程允许我们查看乘客是否被分配到座位。请注意,如果乘客符合限制条件(如果有的话),它还会在将乘客添加到座位之前声明。
public interface IRestrictedSeat
{
List<SeatRestriction> Restrictions { get; }
bool AssertQualifiedPassenger(PassangerModel passenger);
}
public class Seat : ISeat, IRestrictedSeat
{
public bool IsSeatReserved { get { return Passenger != null; } }
public int RowNumber { get; private set; }
public string SeatLetter { get; private set; }
public PassangerModel Passenger { get; private set; }
public List<SeatRestriction> Restrictions { get; private set; }
public Seat(int rowNumber, string seatLetter)
{
Restrictions = new List<SeatRestriction>();
RowNumber = rowNumber;
SeatLetter = seatLetter;
}
public bool TryAddPassenger(PassangerModel passanger)
{
if (AssertQualifiedPassenger(passanger))
{
Passenger = passenger;
return true;
}
else
{
return false;
}
}
public bool AssertQualifiedPassenger(PassangerModel passenger)
{
foreach(SeatRestriction restriction in Restrictions)
{
if (!restriction.Restriction(passenger))
{
return false;
}
}
return true;
}
}
最后我们到了这一行。我们的行知道它的座位是什么以及它的数量是多少。您应该可以为其添加座位,然后拨打GetAvailableSeats
以获取此行中剩余的座位。
public class SeatRow
{
public int TotalSeats { get; private set; }
public int RowNumber { get; private set; }
public List<Seat> Seats { get; private set; }
public SeatRow(int seatsInRow, int rowNumber)
{
TotalSeats = seatsInRow;
RowNumber = rowNumber;
}
public bool TryAddSeatToRow(Seat seat)
{
if(Seats.Count <= TotalSeats && seat.RowNumber == RowNumber)
{
Seats.Add(seat);
return true;
}
else
{
return false;
}
}
public IEnumerable<Seat> GetAvailableSeats()
{
return Seats.Where(seat => seat.IsSeatReserved == false);
}
}
这个答案的长期和短期是有一百万种方法可以解决CIS问题,并且在你上学/学习时不依赖于堆栈溢出。祝你好运,欢迎来到俱乐部:-)
答案 2 :(得分:0)
if (nameArray[i, j] == "")
根本没有做任何事情,并且尽管数组中没有没有名字,但仍会被跳过。
该行位于循环中,循环遍历数组中的项目。如果数组为空,则永远不会执行。