C#中如何逐行输入数独棋盘并替换二维数组grd的值
快速逐行输入填充数独二维数组的方案
嘿,你已经搞定了单行输入的核心逻辑,现在只需要把这个逻辑循环9次,再把每行的结果填充到二维数组里就搞定啦!我给你两种实现方式,你可以根据自己的习惯选:
基础版(复用你原有的代码逻辑)
这个版本完全基于你已经写好的单行处理代码,只是加了循环和行填充的逻辑,还额外加了输入合法性校验和长度修正,避免出错:
// 初始化一个空的9x9数独棋盘(替换你原来的固定数组) int[,] grd = new int[9, 9]; for (int row = 0; row < 9; row++) { Console.WriteLine($"请输入第 {row + 1} 行的数值(用空格分隔,空单元格填0):"); string unprocesed_nums = Console.ReadLine(); string[] split_nums = unprocesed_nums.Split(' '); List<int> nums_list = new List<int>(); int nums; foreach (string s in split_nums) { if (Int32.TryParse(s, out nums)) { // 校验输入是否符合数独规则(0-9之间) if (nums >= 0 && nums <= 9) { nums_list.Add(nums); } else { Console.WriteLine($"忽略无效数值:{s},请输入0-9之间的数字"); } } else { Console.WriteLine($"忽略无法解析的内容:{s}"); } } // 确保每行刚好9个元素:不足补0,多余截断 while (nums_list.Count < 9) { nums_list.Add(0); } if (nums_list.Count > 9) { nums_list = nums_list.GetRange(0, 9); } // 将处理后的行数据填充到二维数组对应位置 for (int col = 0; col < 9; col++) { grd[row, col] = nums_list[col]; } }
简化版(用LINQ压缩代码)
如果你熟悉LINQ的话,可以把单行处理的逻辑简化成链式调用,代码会更紧凑易读:
using System.Linq; // 记得添加这个命名空间 // 初始化空棋盘 int[,] grd = new int[9, 9]; for (int row = 0; row < 9; row++) { Console.WriteLine($"请输入第 {row + 1} 行的数值:"); // 一行完成输入解析、过滤、校验 var numsList = Console.ReadLine() .Split(' ') .Where(s => int.TryParse(s, out _)) // 只保留能转成int的字符串 .Select(int.Parse) .Where(num => num >= 0 && num <= 9) // 只保留0-9的有效数字 .ToList(); // 修正行长度 while (numsList.Count < 9) numsList.Add(0); if (numsList.Count > 9) numsList = numsList.Take(9).ToList(); // 填充到二维数组 for (int col = 0; col < 9; col++) { grd[row, col] = numsList[col]; } }
关键说明
- 循环9次对应数独的9行输入,每次循环处理一行数据
- 输入合法性校验能避免用户输入非数字或超出数独范围的数值
- 行长度修正确保最终每行都是9个元素,不会出现数组越界的问题
- 最后通过内层循环把一维数组的每个元素赋值到二维数组的
[row, col]位置,完美替换你原来的固定数组
内容的提问来源于stack exchange,提问作者PRO_grammer
相关产品推荐
相关产品推荐

