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

获取方阵外圈元素并顺时针旋转90度API报错排查求助

问题排查与代码修正

一、路由匹配错误的原因及修复

浏览器报错No action was found on the controller 'XXX' that matches the request,核心原因是路由占位符名称与方法参数名不匹配:
你的路由定义是[Route("api/sunflower/{string}")],但方法参数是string input,ASP.NET无法将路由中的{string}绑定到input参数,导致找不到匹配的Action。

修复方案

将路由中的占位符名称改为与参数名一致:

[HttpGet]
[Route("api/sunflower/{input}")]
public string rotate(string input)
{
    // 后续代码...
}

如果输入字符串包含特殊字符(比如逗号),更稳妥的方式是改用查询参数:

[HttpGet]
[Route("api/sunflower/rotate")]
public string rotate([FromQuery] string input)
{
    // 后续代码...
}
// 请求URL示例:api/sunflower/rotate?input=3,4,3,1,6,5,2,9,7,3

二、方阵外圈旋转逻辑的错误及修正

原代码的旋转逻辑完全不符合需求,以下是重新实现的正确逻辑:

核心思路

  1. 解析输入:第一个数字为方阵阶数n,后续数字按行填充为n×n二维矩阵。
  2. 创建新矩阵,中间区域元素直接保留原矩阵的值。
  3. 处理外圈元素的顺时针旋转90度:
    • 新矩阵的第一行 = 原矩阵的最后一列(从上到下)
    • 新矩阵的最后一行 = 原矩阵的第一列(从上到下)
    • 新矩阵的第一列(除首尾行) = 原矩阵第一行的中间元素(从右到左)
    • 新矩阵的最后一列(除首尾行) = 原矩阵最后一行的中间元素(从左到右)

修正后的完整代码

[HttpGet]
[Route("api/sunflower/{input}")]
public string Rotate(string input)
{
    try
    {
        // 解析输入为整数数组
        int[] inputArr = input.Split(',').Select(s => int.Parse(s)).ToArray();
        int n = inputArr[0];
        
        // 验证输入合法性:总长度应为n² + 1(首元素是阶数)
        if (inputArr.Length != n * n + 1)
        {
            return "输入格式错误:元素总数应为n²+1(n为首元素)";
        }

        // 构建原n×n矩阵
        int[,] originalMatrix = new int[n, n];
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < n; j++)
            {
                originalMatrix[i, j] = inputArr[1 + i * n + j];
            }
        }

        // 创建新矩阵,初始复制原矩阵
        int[,] rotatedMatrix = new int[n, n];
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < n; j++)
            {
                rotatedMatrix[i, j] = originalMatrix[i, j];
            }
        }

        // 处理外圈顺时针旋转90度
        // 1. 新矩阵第一行 = 原矩阵最后一列(从上到下)
        for (int j = 0; j < n; j++)
        {
            rotatedMatrix[0, j] = originalMatrix[j, n - 1];
        }

        // 2. 新矩阵最后一行 = 原矩阵第一列(从上到下)
        for (int j = 0; j < n; j++)
        {
            rotatedMatrix[n - 1, j] = originalMatrix[j, 0];
        }

        // 3. 新矩阵第一列(除首尾行) = 原矩阵第一行的中间元素(从右到左)
        for (int i = 1; i < n - 1; i++)
        {
            rotatedMatrix[i, 0] = originalMatrix[0, n - 1 - i];
        }

        // 4. 新矩阵最后一列(除首尾行) = 原矩阵最后一行的中间元素(从左到右)
        for (int i = 1; i < n - 1; i++)
        {
            rotatedMatrix[i, n - 1] = originalMatrix[n - 1, i];
        }

        // 将新矩阵转换为输出字符串(按行用空格分隔,行之间用换行)
        List<string> outputLines = new List<string>();
        for (int i = 0; i < n; i++)
        {
            List<string> lineElements = new List<string>();
            for (int j = 0; j < n; j++)
            {
                lineElements.Add(rotatedMatrix[i, j].ToString());
            }
            outputLines.Add(string.Join(" ", lineElements));
        }

        return string.Join("\n", outputLines);
    }
    catch (Exception ex)
    {
        return $"处理出错:{ex.Message}";
    }
}

测试验证

输入字符串:3,4,3,1,6,5,2,9,7,3
输出结果:

1 2 3
3 5 7
4 6 9

完全符合示例需求。

内容的提问来源于stack exchange,提问作者Flora Jiang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 14:20:16