我一直在研究Deitel的Visual C#2010。我在关于数组的章节中坚持练习。它已经困扰了我好几天了,而且我现在已经多次编写代码并且每次都出错了。
该演习要求为一家小型航空公司开发一个新的预订系统。飞机的容量是10个座位。因此,您要求客户输入1表示头等舱,2表示经济舱。 1至5个座位是头等舱。 6到10个座位是为了经济。
我必须使用bool类型的一维数组来表示飞机的座位字符。将数组的所有元素初始化为false以表示空位(无论如何,幸运的是bool初始化为false,因为我不知道如何初始化数组)。在分配每个座位时,将平面中的相应元素设置为true。
应用程序永远不应指定已经坐过的座位。当经济舱满员时,应用程序应询问客户是否想要乘坐头等舱(反之亦然)。如果客户回答是,请在经济舱中指派他(如果那里有空座位)。如果经济舱没有空座位或客户拒绝乘坐头等舱,那么只需向他显示"下一班航班是在三小时后!)。
我自学这本书。这不是作业或作业。我真的不想发布我写的代码,因为我想要一个全新的方法来解决问题,但我很确定我会被问到代码,所以这里是
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Craps_Game
{
class AirlineReservation
{
private static bool[] seats = new bool[10];
private static void FirstClass(ref bool[] seats)
{
for(int i = 0; i < 5; i++)
{
if (seats[i] == false)
{
seats[i] = true;
Console.WriteLine("Your seat number is " + i);
break;
}
else
{
Console.WriteLine("First Class is full. Would you like to fly Economy?");
if (Console.ReadLine().ToLower() == "y")
Economy(ref seats);
else
Console.WriteLine("The next flight is in three hours!. Good bye");
}
}
}
private static void Economy(ref bool[] seats)
{
for (int i = 5; i < 10; i++)
if (seats[i] == false)
seats[i] = true;
else
{
Console.WriteLine("Economy class is full. Would you like to fly First Class");
if (Console.ReadLine().ToLower() == "y")
FirstClass(ref seats);
else
Console.WriteLine("The next flight is in three hours!. Good Bye");
}
}
public static void Reservation()
{
do
{
Console.WriteLine("Enter 1 to fly First Class");
Console.WriteLine("Enter 2 to fly Economy Class");
if (Convert.ToInt32(Console.ReadLine()) == 1)
FirstClass(ref seats);
else
Economy(ref seats);
} while (true);
}
}
}
请记住,我宁愿采用完全不同的方式解决问题,而不是解决这个问题:)
答案 0 :(得分:4)
我不想在你学习的过程中解决代码中的整个问题,但我会告诉你我在你的代码中看到的主要内容是一个bug。
Economy
方法没有退出循环
座位是可用的。它需要打破。else
未检查所有座位是否已被占用。检查i == 9
是否会这样做,只有在没有座位的情况下才会转到FirstClass
,而不是之前。
private static void Economy(ref bool[] seats)
{
for (int i = 5; i < 10; i++)
{ // <---- Added the brackets
if (seats[i] == false)
{
seats[i] = true;
break; // <----- You forgot to break when you reserved a seat.
}
else if (i == 9) // <---- You weren't checking if all seats are taken.
{
Console.WriteLine("Economy class is full. Would you like to fly First Class");
if (Console.ReadLine().ToLower() == "y")
FirstClass(ref seats);
else
Console.WriteLine("The next flight is in three hours!. Good Bye");
}
}
}
答案 1 :(得分:3)
我喜欢你接近编程和你的任务以及这个网站的方式!
因此我不想为你写出代码 - 所有的乐趣都是由你自己完成。但是既然你被困住了,我就给你一些提示:
public int getFirstVacantSeatIn(int classType) // returns 1-5 for classType=1, 6-10 for classType=2, -1 if classType is full
您可以使用此功能使提示动态,如下所示:
Console.WriteLine( ( getFirstVacantSeatIn(1) >= 0 ?
"Enter 1 to fly First Class") : "First Class is full");
当您尝试分配新席位时,您可以重复使用..:
所以你应该在提出升级或降级之前进行检查..上述功能也会有所帮助。如果您可以重复使用某些内容,那么创建该内容的可能性是正确的。
秘密经常是进一步打破你的问题直到它消失,总是使用/创建有用的名称来解决子问题。< / p>
答案 2 :(得分:2)
&#34;我必须使用bool类型的一维数组来表示飞机的座位字符&#34;
&#34;我想要一种全新的方法来解决问题&#34;
&#34;请记住,我宁愿用一种完全不同的方式解决问题,而不是修复这个问题&#34;
就这样吧!其他人已经给了你很好的建议,但是这里有新鲜的&#34;这样做的方式。
using System;
namespace FunnyConsoleApplication
{
public class Program
{
static void Main(string[] args)
{
Airplane plane = new Airplane();
bool reserve = true;
while (reserve)
{
Console.Clear();
Console.WriteLine("Enter [1] to fly First Class ({0} vacant)", plane.VacantFirstClassSeats());
Console.WriteLine("Enter [2] to fly Economy Class ({0} vacant)", plane.VacantEconomySeats());
string input = Console.ReadLine();
switch (input)
{
case "1":
if (plane.HasFirstClassSeats)
{
plane.ReserveFirstClassSeat();
}
else if (plane.HasEconomySeats)
{
if (IsOk("No vacancy, enter [y] to fly Economy instead?"))
plane.ReserveEconomySeat();
else
reserve = false;
}
else
{
reserve = false;
}
break;
case "2":
if (plane.HasEconomySeats)
{
plane.ReserveEconomySeat();
}
else if (plane.HasFirstClassSeats)
{
if (IsOk("No vacancy, enter [y] to fly First Class instead?"))
plane.ReserveFirstClassSeat();
else
reserve = false;
}
else
{
reserve = false;
}
break;
}
Console.WriteLine();
}
Console.WriteLine("No can do, good bye!");
Console.ReadLine();
}
private static bool IsOk(string question)
{
Console.WriteLine(question);
return string.Compare(Console.ReadLine(), "y", StringComparison.OrdinalIgnoreCase) == 0;
}
}
public class Airplane
{
private readonly bool[] _seats = new bool[10];
public bool HasFirstClassSeats
{
get { return HasSeats(0); }
}
public bool HasEconomySeats
{
get { return HasSeats(5); }
}
public int VacantFirstClassSeats()
{
return GetVacant(0);
}
public int VacantEconomySeats()
{
return GetVacant(5);
}
public void ReserveFirstClassSeat()
{
Reserve(0);
}
public void ReserveEconomySeat()
{
Reserve(5);
}
private bool HasSeats(int index)
{
for (int i = index; i < index + 5; i++)
{
if (!_seats[i])
return true;
}
return false;
}
private int GetVacant(int index)
{
int count = 0;
for (int i = index; i < index + 5; i++)
{
if (!_seats[i])
count++;
}
return count;
}
private void Reserve(int index)
{
for (int i = index; i < index + 5; i++)
{
if (!_seats[i])
{
_seats[i] = true;
break;
}
}
}
}
}
哪个给你