c# - 我无法在 Deitel Visual C# 2010 中解决这个简单的练习

标签 c# arrays

<分区>

我一直在学习 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);
    }
}

请记住,我更喜欢用一种完全不同的方式来解决问题,而不是解决这个问题 :)

最佳答案

由于您正在学习,我不想解决代码中的整个问题,但我会向您展示我在您的代码中看到的主要错误。

  • 如果您的 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");
        }
     }
}

关于c# - 我无法在 Deitel Visual C# 2010 中解决这个简单的练习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24316473/

相关文章:

c# - 将数据插入数据库

javascript - 这个数组初始化速记是如何工作的?

c - 从不同文件部分初始化 C 数组

c# - 从 C# 为 Azure 数据湖分析创建作业

c# - 识别 AES 算法。是 AES 128 还是 AES 256?

c# - 这是一个糟糕的设计吗?

c# - 使用事件序列化类

java - 输出排序算法

java - 如何形成json对象

php - 从 array_rand 函数的结果创建简码