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,提问作者장재현
相关产品推荐
相关产品推荐

