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

调用方法打印数组时遇Error CS8803:顶级语句需前置

解决Error CS8803及数独打印问题

错误原因

CS8803错误是因为C#顶级语句(直接写在命名空间/类外部的代码)必须放在所有命名空间和类型声明之前。你当前代码先写了变量声明、数组初始化这类顶级语句,接着定义prettyPrinters类,最后又写了prettySudoku(puzzle);这个顶级调用,违反了语法规则。

另外代码还有两个隐藏问题:

  1. int[][]是交错数组,不能用arr.GetLength(1)获取列数,需改用arr[i].Length
  2. 用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 23:10:04