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

C#实现数组按与选定数字的距离由近及远排序

Hey,我帮你把这个C#功能完善并实现好了!下面是完整的可运行代码,之后我会拆解关键细节帮你理解:

完整实现代码
using System;
using System.Linq;

class Program
{
    static void Main()
    {
        int min = 1;
        int max = 100;
        int[] array = new int[10];
        Random rand = new Random();

        // 生成10个1-100的随机整数数组
        for (int i = 0; i < array.Length; i++)
        {
            // Next是左闭右开区间,所以max+1才能包含100这个数
            array[i] = rand.Next(min, max + 1);
        }

        // 输出原始数组
        Console.WriteLine("原始数组:");
        foreach (int num in array)
        {
            Console.Write($"{num} ");
        }
        Console.WriteLine("\n");

        // 提示用户输入选定数字,加了简单的输入验证
        Console.Write("请输入一个选定数字:");
        int chosenNumber;
        while (!int.TryParse(Console.ReadLine(), out chosenNumber))
        {
            Console.Write("输入无效,请输入一个有效的整数:");
        }

        // 按与选定数字的绝对值距离由近及远排序
        var sortedArray = array.OrderBy(element => Math.Abs(element - chosenNumber)).ToArray();

        // 输出排序后的数组
        Console.WriteLine("\n按绝对值距离排序后的数组:");
        foreach (int num in sortedArray)
        {
            Console.Write($"{num} ");
        }
    }
}
关键细节修正&说明
  • 随机数范围修复:原始代码里的randNum.Next(min, max)只能生成1到99的整数,因为Random.Next(int min, int max)是左闭右开的区间(包含min,不包含max)。所以我改成了max + 1,这样就能生成1到100的随机数了。
  • 输入健壮性优化:我加了int.TryParse的循环验证,避免用户输入非数字内容导致程序崩溃,比直接用int.Parse更稳妥。
  • 排序逻辑修正:原始代码里的Math.Abs(e, b)是错误用法,正确的做法是计算数组元素和选定数字的差值的绝对值,也就是Math.Abs(element - chosenNumber),这样才能得到元素和目标数字的“距离”,再用LINQ的OrderBy按这个距离从小到大排序。
  • 可读性优化:把原始代码里模糊的变量名a、b改成了array、chosenNumber,这样代码逻辑更清晰,后期维护也方便。

内容的提问来源于stack exchange,提问作者장재현

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:47:47