为什么我的 IF 和 ELSE 语句都运行了?

问题描述 投票:0回答:1

我正在尝试学习 C#,因此我想用 C# 创建一些简单的应用程序。当我先创建用户然后创建宠物时,使用我放在所有者对象中的名称,我可以看到它在调试时循环了 IF 语句,然后在循环了 IF 语句之后,它还循环了 else 语句?如果不调试,它还会同时返回 if 和 else 语句。

我的主要方法

namespace Pet_Clinic
{
    internal class Program
    {
        static void Main(string[] args)
        {

            Owner newOwner = new Owner();
            Pet pet = new Pet();

            bool running = true;

            while (running)
            {
                Console.Clear();
                Console.WriteLine("Pet Clinic Menu");
                Console.WriteLine("");
                Console.WriteLine("--------------------------");
                Console.WriteLine("");
                Console.WriteLine("1. Create customer");
                Console.WriteLine("2. Add pet to customer");
                Console.WriteLine("3. Get pets from customer.");
                Console.WriteLine("5. Quit");
                Console.WriteLine("");
                Console.WriteLine("--------------------------");
                Console.WriteLine("");
                Console.Write("Pick an option: ");

                int choice = int.Parse(Console.ReadLine());

                switch (choice)
                {
                    case 1:
                        Console.Write("Enter name of owner: ");
                        string belongsTo = Console.ReadLine();

                        Console.Write("Enter adress: ");
                        string ownerAddress = Console.ReadLine();

                        Console.Write("Enter email: ");
                        string ownerEmail = Console.ReadLine();

                        Console.Write("Enter phonenumber: ");
                        string ownerPhonenumber = Console.ReadLine();

                        newOwner.CreateOwner(belongsTo, ownerAddress, ownerEmail, ownerPhonenumber);

                        
                        Console.Clear();
                        Console.WriteLine("Owner created successfully.");
                        Console.Write("Press enter to return to menu: ");
                        Console.ReadLine();
                        break;

                    case 2:
                        Console.WriteLine("Enter pet name:");
                        string petName = Console.ReadLine();

                        Console.WriteLine("Enter pet breed:");
                        string petBreed = Console.ReadLine();

                        Console.WriteLine("Enter pet age:");
                        int petAge = int.Parse(Console.ReadLine());

                        Console.WriteLine("Enter owner name:");
                        string ownerName = Console.ReadLine();

                        Owner owner = newOwner.FindOwnerByName(ownerName);
                        if (owner == null)
                        {
                            Console.WriteLine($"No owner with the name {ownerName} exists.");
                        }
                        else
                        {
                            pet.CreatePet(petName, petBreed, petAge, owner);
                            Console.WriteLine($"Pet {petName} added to owner {ownerName} successfully.");
                        }
                        Console.Write("Press enter to return to menu: ");
                        Console.ReadLine();
                        break;

                    case 3:
                        break;
                    case 4:
                        break;
                    case 5:
                        running = false;
                        break;
                    default:
                        Console.WriteLine("Invalid option.");
                        break;
                }
            }
        }
    }
}

我的主人班

namespace Pet_Clinic.Model
{
    public class Owner
    {
        /* Fields */
        public string belongsTo { get; set; }
        public string Address { get; set; }
        public string PhoneNumber { get; set; }
        public string Email { get; set; }

        /* Methods */

        public override string ToString()
        {
            return $"{belongsTo} - {Address} - {PhoneNumber} - {Email}";
        }

        public List<Owner> owners = new List<Owner>();
        

        public Owner()
        {
            // Initialize the owners list in the constructor
            owners = new List<Owner>();
        }
        // Method to create the owner object
        public void CreateOwner(string name, string address, string email, string phonenumber)
        {
            Owner newOwner = new Owner()
            {
                belongsTo = name,
                Address = address,
                Email = email,
                PhoneNumber = phonenumber,
            };
            owners.Add(newOwner);
        }
         // Method to find the owner taking one parameter.
        public Owner FindOwnerByName(string ownerName)
        {
            // Loop through the owners list and return the first owner that matches the ownerName
            foreach (Owner owner in owners)
            {
                if (owner.belongsTo == ownerName)
                {
                    return owner;
                }
            }

            // If no matching owner is found, return null
            return null;
        }

    }
}

我的宠物班

namespace Pet_Clinic.Model
{
    /* Fields */
    public class Pet
    {
        public string Name { get; set; }
        public string Breed { get; set; }
        public int Age { get; set; }
        public Owner Owner { get; set; }

        public List<Pet> petList = new List<Pet>();

        /* Methods */


        public override string ToString()
        {
            return $"Name: {Name} Breed: {Breed} Age: {Age} Owner: {Owner}";
        }
        // Method to create pet
        public void CreatePet(string name, string breed, int age, Owner owner)
        {
            // Check if the owner exists in the owner list
            if (!owner.owners.Contains(owner))
            {
                Console.WriteLine("Owner does not exist.");
                return;
            }

            Pet newPet = new Pet
            {
                Name = name,
                Breed = breed,
                Age = age,
                Owner = owner,
            };
            // Adds pet to list
            petList.Add(newPet);
        }
    }
}

控制台应用程序:

c# console-application
1个回答
0
投票

简短的回答是 not 同时击中 if 和 else 语句。

比较这部分输出

使用此代码

Console.WriteLine("Enter owner name:");
string ownerName = Console.ReadLine();

Owner owner = newOwner.FindOwnerByName(ownerName);
if (owner == null)
{
    Console.WriteLine($"No owner with the name {ownerName} exists.");
}
else
{
    pet.CreatePet(petName, petBreed, petAge, owner);
    Console.WriteLine($"Pet {petName} added to owner {ownerName} successfully.");
}
  • 我们看到它要求所有者姓名
  • 调用它找到的 FindOwnerByName
  • 越过 if 语句进入 else 语句
  • 然后我们调用 CreatePet,它给我们“所有者不存在”消息。

这是因为所有者不在其所有者列表中。这与在 Main 中初始化的所有者列表 (newOwner) 不同。

  • 最后我们从 Create Pet 返回并看到消息“Pet mamba added...”
© www.soinside.com 2019 - 2024. All rights reserved.