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

在C#中实现char类型二维数组90/180/270度旋转及重置

C#实现char类型6×6二维数组的旋转与重置(基于switch语句)

数组旋转的核心逻辑和元素类型无关,int类型的旋转算法完全可以直接适配char类型——本质都是按位置规则重新赋值元素。下面是完整的实现方案,包含初始化、旋转(90/180/270度)、重置和输出功能,用switch语句处理操作选择。

核心思路

  • 提前备份初始数组:初始化时复制一份原数组,用于后续重置操作
  • 旋转逻辑:通过计算目标位置与原位置的映射关系,逐个赋值新数组(避免直接修改原数组导致的元素覆盖问题)
  • 用switch语句分发不同的操作指令

完整代码实现

using System;

class CharArrayRotation
{
    static void Main()
    {
        // 初始化6×6 char数组
        char[,] originalArray = new char[6, 6];
        // 填充示例数据(可替换为自定义内容)
        for (int i = 0; i < 6; i++)
        {
            for (int j = 0; j < 6; j++)
            {
                originalArray[i, j] = (char)('A' + i * 6 + j);
            }
        }

        // 备份初始状态用于重置
        char[,] backupArray = (char[,])originalArray.Clone();
        char[,] currentArray = (char[,])originalArray.Clone();

        bool running = true;
        while (running)
        {
            Console.WriteLine("\n当前数组状态:");
            PrintArray(currentArray);
            Console.WriteLine("\n请选择操作:");
            Console.WriteLine("1 - 90度旋转");
            Console.WriteLine("2 - 180度旋转");
            Console.WriteLine("3 - 270度旋转");
            Console.WriteLine("4 - 重置到初始状态");
            Console.WriteLine("5 - 退出");
            Console.Write("输入选项:");
            string input = Console.ReadLine();

            switch (input)
            {
                case "1":
                    currentArray = Rotate90(currentArray);
                    break;
                case "2":
                    currentArray = Rotate180(currentArray);
                    break;
                case "3":
                    currentArray = Rotate270(currentArray);
                    break;
                case "4":
                    currentArray = (char[,])backupArray.Clone();
                    break;
                case "5":
                    running = false;
                    break;
                default:
                    Console.WriteLine("无效选项,请重新输入");
                    break;
            }
        }
    }

    // 打印二维数组
    static void PrintArray(char[,] array)
    {
        for (int i = 0; i < array.GetLength(0); i++)
        {
            for (int j = 0; j < array.GetLength(1); j++)
            {
                Console.Write(array[i, j] + " ");
            }
            Console.WriteLine();
        }
    }

    // 90度顺时针旋转
    static char[,] Rotate90(char[,] original)
    {
        int size = original.GetLength(0);
        char[,] rotated = new char[size, size];
        for (int i = 0; i < size; i++)
        {
            for (int j = 0; j < size; j++)
            {
                rotated[j, size - 1 - i] = original[i, j];
            }
        }
        return rotated;
    }

    // 180度旋转
    static char[,] Rotate180(char[,] original)
    {
        int size = original.GetLength(0);
        char[,] rotated = new char[size, size];
        for (int i = 0; i < size; i++)
        {
            for (int j = 0; j < size; j++)
            {
                rotated[size - 1 - i, size - 1 - j] = original[i, j];
            }
        }
        return rotated;
    }

    // 270度顺时针旋转(等价于90度逆时针)
    static char[,] Rotate270(char[,] original)
    {
        int size = original.GetLength(0);
        char[,] rotated = new char[size, size];
        for (int i = 0; i < size; i++)
        {
            for (int j = 0; j < size; j++)
            {
                rotated[size - 1 - j, i] = original[i, j];
            }
        }
        return rotated;
    }
}

关键说明

  1. 类型适配:char和int都是值类型,旋转时只需要按位置映射复制元素即可,不需要修改算法逻辑——你之前找到的int数组旋转代码,把int替换成char就能直接用。
  2. 数组克隆:使用Clone()方法备份初始数组,重置时直接克隆备份数组即可恢复初始状态,避免引用类型的赋值问题。
  3. 旋转逻辑:
    • 90度顺时针:原位置(i,j) → 目标位置(j, size-1-i)
    • 180度:原位置(i,j) → 目标位置(size-1-i, size-1-j)
    • 270度顺时针:原位置(i,j) → 目标位置(size-1-j, i)
  4. switch分发:通过输入选项匹配不同的操作分支,清晰处理旋转、重置和退出逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 19:20:35