C# 检查数组是不是“满”

Posted

技术标签:

【中文标题】C# 检查数组是不是“满”【英文标题】:C# Check if array is "full"C# 检查数组是否“满” 【发布时间】:2021-03-15 22:08:09 【问题描述】:

我有一个关于数组的问题。

在下面的代码中,计划是为用户提供一个菜单,如果用户选择 nr 1,程序将要求用户输入姓名和年龄以填充数组。但是我希望代码在要求用户输入名称之前检查名称数组是否已满(这是因为名称是用户被要求输入的第一件事)。如果数组是“满的”,它应该写出类似“满”的东西,如果不是,则要求用户输入信息。

这是问题进入图片...

因为只要用户不想退出程序(通过菜单),菜单就会循环,因此可以多次选择此选项。如果用户再次选择相同的选项,则意味着数组已满,并且无法对同一数组进行更多输入。 在我当前的代码中,这个“检查”功能不起作用。我尝试了不同的解决方案,包括 if/else、bool 循环和自定义设计的方法。他们都失败了。

在 *** 上快速搜索,给出了一些想法,但没有人为我工作,虽然其中一个线程似乎是个好方法,但我不明白如何构建这种方法。这是该答案的链接:check if array is full(有趣的部分是“int bookCounter = 0;”

我确信有一种简单的方法可以解决这个问题,但我非常感谢您的帮助!

备注:部分代码是用瑞典语编写的,但我将所有重要部分都翻译成英文。

 public void Run()
    
        int choice;
        do
        

            //Menyn:

            Console.WriteLine("Hello and welcome to this awesome buss-simulator!0", Environment.NewLine);
            Console.WriteLine("Please choose an option in the menu below.0", Environment.NewLine);
            Menytexts();


            choice = CorrectEntryMenu(1, 8); //Method to make sure it's a number. Not related to this.

            switch (choice)
            
                case 1:
                    Console.WriteLine("Welcome, please enter the passengers name:"); //lägg till passa.
                    string name = Console.ReadLine();

                    int age = CorrectEntry("We also need the persons age: "); //Another method for correct input. Not the problem.

                    add_passenger(age, name); //Sending input info to the method containing the arrays.

                    Console.WriteLine("The passenger is registered. " +
                        "Press any key to return to the manu");

                    Console.ReadKey();

                    break;

                case 2:
                    print_buss();
                    break;


            
         while (choice != 8);


    

    //Metoder för betyget E

    public void add_passenger(int age, string name) //Method containing the arrays and the problems.
    

        string[] passengername = new string[2]; //Array for all the names. temporarily set to 2 spaces. 



         //idealistically the method for checking the array is inserted here.

        for (int n = 0; n < passengername.Length; n++) //To fill array if not full
        
            name = passengername[n];

            int[] passengerage = new int[2]; //Array for all the ages. Temporarily set to 2 spaces. 

            for (int x = 0; x < passengerage.Length; x++) //If the namearray is not full then age is entered.
            
                age = passengerage[x]; 


            

        

【问题讨论】:

您链接的问题/答案似乎是合理的。基本上,数组是固定长度的,所以你需要维护一个变量来计算你向数组添加了多少次。当该计数达到数组的长度时,它已满。但是,如果您当前没有维护一个计数器,那么您如何知道在添加新内容时要写入哪个数组位置? 您可能需要查看可在整个过程中使用的静态变量(方法之外)。跟踪计数器(您最后一次放置值的位置)将是接下来的事情,因此您可以增加它并添加值。如果 counter == array.Count(),则停止 由于您的集合可以是可变大小的,因此它应该是代表它的类型(即List&lt;T&gt;)而不是数组。 谢谢你们!虽然列表而不是数组的想法是最简单的方法(我猜),但在这个项目中我更喜欢使用数组。有关计数器变量的更多信息,我可以在搜索中使用什么好的关键字? 【参考方案1】:

您已经在 add_passenger 方法中定义了 string[] 乘客名,因此当该方法返回时它不再存在(并且添加的乘客丢失了)。

您可以先将 string[] 乘客名设为实例变量。

还有:

  age = passengerage[x]; 

应该是:

  passengerage[x] = age; 

【讨论】:

以上是关于C# 检查数组是不是“满”的主要内容,如果未能解决你的问题,请参考以下文章

检查二维数组c#中的某些元素是不是相等

在 C# 中使用“Regex”检查字符串数组中是不是存在元素

使用 C# 检查字符串是不是包含字符串数组中的字符串

如何检查在 C# 的全局类中找到的数组中是不是存在对象

C# 检查字符串是不是包含字符串数组中的任何匹配项

如何使用 Velocity 模板语言检查数组中是不是存在值