调用方法打印数组时遇Error CS8803:顶级语句需前置
解决Error CS8803及数独打印问题
错误原因
CS8803错误是因为C#顶级语句(直接写在命名空间/类外部的代码)必须放在所有命名空间和类型声明之前。你当前代码先写了变量声明、数组初始化这类顶级语句,接着定义prettyPrinters类,最后又写了prettySudoku(puzzle);这个顶级调用,违反了语法规则。
另外代码还有两个隐藏问题:
int[][]是交错数组,不能用arr.GetLength(1)获取列数,需改用arr[i].Length- 用
Console.WriteLine会让每个数字单独换行,不符合数独的排版逻辑,应该用Console.Write输出单个数字,每行结束再换行
修复后的代码方案
方案一:调整代码顺序,类声明前置
public class prettyPrinters{ public void prettySudoku(int[][] arr){ for(int i = 0; i < arr.Length; i++){ for(int j = 0; j < arr[i].Length; j++){ Console.Write(arr[i][j] + " "); } Console.WriteLine(); } } } // 顶级语句放在类声明之后 int[] list1 = new int[]{7, 3, 6, 4, 5, 2, 9, 8, 1}; int[] list2 = new int[]{1, 9, 8, 6, 3, 7, 4, 5, 2}; int[] list3 = new int[]{4, 2, 5, 9, 8, 1, 3, 7, 6}; int[] list4 = new int[]{3, 6, 4, 5, 2, 8, 1, 9, 7}; int[] list5 = new int[]{9, 5, 2, 7, 1, 4, 6, 3, 8}; int[] list6 = new int[]{8, 1, 7, 3, 9, 6, 2, 4, 5}; int[] list7 = new int[]{2, 8, 9, 1, 7, 3, 5, 6, 4}; int[] list8 = new int[]{6, 7, 3, 2, 4, 5, 8, 1, 9}; int[] list9 = new int[]{5, 4, 1, 8, 6, 9, 7, 2, 3}; int[][] puzzle = new int[][] {list1, list2, list3, list4, list5, list6, list7, list8, list9}; // 创建类实例后调用方法 var printer = new prettyPrinters(); printer.prettySudoku(puzzle);
方案二:使用静态方法,无需实例化类
如果不想调整代码顺序,可将方法设为静态,直接通过类名调用,同时保持类声明在顶级语句之前:
public class prettyPrinters{ public static void prettySudoku(int[][] arr){ for(int i = 0; i < arr.Length; i++){ for(int j = 0; j < arr[i].Length; j++){ Console.Write(arr[i][j] + " "); } Console.WriteLine(); } } } int[] list1 = new int[]{7, 3, 6, 4, 5, 2, 9, 8, 1}; // 其他数组定义不变 int[][] puzzle = new int[][] {list1, list2, list3, list4, list5, list6, list7, list8, list9}; // 直接通过类名调用静态方法 prettyPrinters.prettySudoku(puzzle);
可选优化:增强数独排版可读性
如果想让数独格式更清晰,可添加行列分隔线:
public static void prettySudoku(int[][] arr){ for(int i = 0; i < arr.Length; i++){ if(i % 3 == 0 && i != 0){ Console.WriteLine("---------------------"); } for(int j = 0; j < arr[i].Length; j++){ if(j % 3 == 0 && j != 0){ Console.Write("| "); } Console.Write(arr[i][j] + " "); } Console.WriteLine(); } }
内容的提问来源于stack exchange,提问作者Freyseee
相关产品推荐
相关产品推荐

