You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#控制台应用:数组创建、算法适配及代码错误修复求助

解决你的C#控制台应用问题

让我们一步步修复并完善你的代码,搞定所有提到的问题:

1. 修复RandomArray方法的返回值问题

原来的方法只生成了单个随机数,完全没返回数组,这就是报错的原因。我们改成生成一个随机长度的数组,每个元素都是随机整数,最后返回这个数组:

private static int[] RandomArray()
{
    Random random = new Random();
    // 随机生成数组长度(1到20之间)
    int length = random.Next(1, 21);
    int[] randomArr = new int[length];
    
    for (int i = 0; i < length; i++)
    {
        // 每个元素生成1-100的随机整数
        randomArr[i] = random.Next(1, 101);
    }
    
    Console.WriteLine($"已生成随机数组,长度为{length},元素为:");
    Console.WriteLine(string.Join(", ", randomArr));
    Console.ReadKey();
    return randomArr;
}

2. 实现UserDefinedArray方法

让用户自己输入数组长度和每个元素,同时增加输入校验,避免无效值:

private static int[] UserDefinedArray()
{
    Console.Write("请输入自定义数组的长度:");
    // 校验输入是否为正整数
    if (!int.TryParse(Console.ReadLine(), out int length) || length <= 0)
    {
        Console.WriteLine("输入无效,请输入正整数!");
        Console.ReadKey();
        return UserDefinedArray(); // 让用户重新输入
    }
    
    int[] userArr = new int[length];
    for (int i = 0; i < length; i++)
    {
        Console.Write($"请输入第{i+1}个元素:");
        // 循环校验直到输入有效整数
        while (!int.TryParse(Console.ReadLine(), out userArr[i]))
        {
            Console.WriteLine("输入无效,请输入整数!");
            Console.Write($"请重新输入第{i+1}个元素:");
        }
    }
    
    Console.WriteLine("你的自定义数组已创建:");
    Console.WriteLine(string.Join(", ", userArr));
    Console.ReadKey();
    return userArr;
}

3. 修复PreDefinedArray的递归问题

原来的方法错误地递归调用自己,会导致栈溢出,直接返回预定义数组即可:

private static int[] PreDefinedArray()
{
    int[] preDefinedArr = new int[6] {4, 8, 15, 16, 23, 42 };
    Console.WriteLine("已选择预定义数组:");
    Console.WriteLine(string.Join(", ", preDefinedArr));
    Console.ReadKey();
    return preDefinedArr;
}

4. 重构算法类,适配用户选择的数组

求和算法(Sum类)

把原来的Main方法改成静态的Execute方法,接收数组参数:

namespace sum
{
    class Sum
    {
        public static void Execute(int[] tab)
        {
            if (tab == null || tab.Length == 0)
            {
                Console.WriteLine("请先选择一个有效的数组!");
                Console.ReadKey();
                return;
            }
            
            int wynik = 0;
            foreach (int num in tab)
            {
                wynik += num;
            }
            Console.WriteLine($"Wynik sumy elementów ciągu wynosi: {wynik}");
            Console.ReadKey();
        }
    }
}

求平均算法(Average类)

原来的逻辑是让用户重新输入数字,现在改成计算传入数组的平均值:

namespace AverageNums
{
    class Average
    {
        public static void Execute(int[] tab)
        {
            if (tab == null || tab.Length == 0)
            {
                Console.WriteLine("请先选择一个有效的数组!");
                Console.ReadKey();
                return;
            }
            
            double suma = 0;
            foreach (int num in tab)
            {
                suma += num;
            }
            double srednia = suma / tab.Length;
            Console.WriteLine($"Średnia arytmetyczna elementów ciągu wynosi: {srednia:F2}");
            Console.ReadKey();
        }
    }
}

5. 更新菜单逻辑,调用正确的算法

修改菜单的switch分支,增加数组检查,避免用户未选数组就执行算法:

case ConsoleKey.D4:
    Console.Clear();
    if (tab != null)
    {
        sum.Sum.Execute(tab);
    }
    else
    {
        Console.WriteLine("请先选择一个数组!");
        Console.ReadKey();
    }
    break;
case ConsoleKey.D5:
    Console.Clear();
    if (tab != null)
    {
        long product = 1;
        foreach (int num in tab)
        {
            product *= num;
        }
        Console.WriteLine($"Iloczyn elementów ciągu wynosi: {product}");
        Console.ReadKey();
    }
    else
    {
        Console.WriteLine("请先选择一个数组!");
        Console.ReadKey();
    }
    break;
case ConsoleKey.D6:
    Console.Clear();
    if (tab != null)
    {
        AverageNums.Average.Execute(tab);
    }
    else
    {
        Console.WriteLine("请先选择一个数组!");
        Console.ReadKey();
    }
    break;

完整修正后的菜单类代码

namespace Menu
{
    static class MenuProste
    {
        public static void StartMenuProste()
        {
            Console.Title = "Moje menu";
            int[] tab = null;
            
            while (true)
            {
                Console.Clear();
                Console.WriteLine(">>> Witaj! Wciśnij klawisz, aby wybrać algorytm! <<<");
                Console.WriteLine("1- Wybierz zdefiniowany wcześniej ciąg.");
                Console.WriteLine("2- Zdefiniuj własny ciąg.");
                Console.WriteLine("3- Wybierz losowy ciąg.");
                Console.WriteLine("4- Suma elementów ciagu n-elementowego.");
                Console.WriteLine("5- Iloczyn elementów ciagu n-elementowego.");
                Console.WriteLine("6- Srednia arytmetyczna elementów ciagu n-elementowego.");
                Console.WriteLine("7- Wypisanie elementów ciagu Fibonacciego");
                Console.WriteLine("8- Ile razy dany element podany na wejsciu wystepuje w danym ciagu n-elementowym. ");
                Console.WriteLine("9- Znajdowanie elementu najwiekszego (najmniejszego) w danym ciagu n-elementowy.");
                Console.WriteLine("0- Koniec");

                ConsoleKeyInfo klawisz = Console.ReadKey();
                switch (klawisz.Key)
                {
                    case ConsoleKey.D1:
                        Console.Clear();
                        tab = PreDefinedArray();
                        break;
                    case ConsoleKey.D2:
                        Console.Clear();
                        tab = UserDefinedArray();
                        break;
                    case ConsoleKey.D3:
                        Console.Clear();
                        tab = RandomArray();
                        break;
                    case ConsoleKey.D4:
                        Console.Clear();
                        if (tab != null)
                        {
                            sum.Sum.Execute(tab);
                        }
                        else
                        {
                            Console.WriteLine("请先选择一个数组!");
                            Console.ReadKey();
                        }
                        break;
                    case ConsoleKey.D5:
                        Console.Clear();
                        if (tab != null)
                        {
                            long product = 1;
                            foreach (int num in tab)
                            {
                                product *= num;
                            }
                            Console.WriteLine($"Iloczyn elementów ciągu wynosi: {product}");
                            Console.ReadKey();
                        }
                        else
                        {
                            Console.WriteLine("请先选择一个数组!");
                            Console.ReadKey();
                        }
                        break;
                    case ConsoleKey.D6:
                        Console.Clear();
                        if (tab != null)
                        {
                            AverageNums.Average.Execute(tab);
                        }
                        else
                        {
                            Console.WriteLine("请先选择一个数组!");
                            Console.ReadKey();
                        }
                        break;
                    case ConsoleKey.D7:
                    case ConsoleKey.D8:
                    case ConsoleKey.D9:
                        Console.Clear();
                        opcjaWBudowie();
                        break;
                    case ConsoleKey.Escape:
                    case ConsoleKey.D0:
                        Environment.Exit(0);
                        break;
                    default:
                        break;
                }
            }
        }

        private static int[] RandomArray()
        {
            Random random = new Random();
            int length = random.Next(1, 21);
            int[] randomArr = new int[length];
            
            for (int i = 0; i < length; i++)
            {
                randomArr[i] = random.Next(1, 101);
            }
            
            Console.WriteLine($"已生成随机数组,长度为{length},元素为:");
            Console.WriteLine(string.Join(", ", randomArr));
            Console.ReadKey();
            return randomArr;
        }

        private static int[] UserDefinedArray()
        {
            Console.Write("请输入自定义数组的长度:");
            if (!int.TryParse(Console.ReadLine(), out int length) || length <= 0)
            {
                Console.WriteLine("输入无效,请输入正整数!");
                Console.ReadKey();
                return UserDefinedArray();
            }
            
            int[] userArr = new int[length];
            for (int i = 0; i < length; i++)
            {
                Console.Write($"请输入第{i+1}个元素:");
                while (!int.TryParse(Console.ReadLine(), out userArr[i]))
                {
                    Console.WriteLine("输入无效,请输入整数!");
                    Console.Write($"请重新输入第{i+1}个元素:");
                }
            }
            
            Console.WriteLine("你的自定义数组已创建:");
            Console.WriteLine(string.Join(", ", userArr));
            Console.ReadKey();
            return userArr;
        }

        private static int[] PreDefinedArray()
        {
            int[] preDefinedArr = new int[6] {4, 8, 15, 16, 23, 42 };
            Console.WriteLine("已选择预定义数组:");
            Console.WriteLine(string.Join(", ", preDefinedArr));
            Console.ReadKey();
            return preDefinedArr;
        }

        static void opcjaWBudowie()
        {
            Console.Write("Opcja w budowie!");
            Console.ReadKey();
        }
    }
}

现在所有问题都解决了:

  • RandomArray正确返回随机数组,修复了返回值错误
  • UserDefinedArray实现了用户自定义数组的功能
  • 求和、求平均算法现在接收用户选择的数组作为参数,不再依赖硬编码
  • 菜单增加了数组检查,避免用户未选数组就执行算法的情况

内容的提问来源于stack exchange,提问作者DoktorAgon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 10:07:30