在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; } }
关键说明
- 类型适配:char和int都是值类型,旋转时只需要按位置映射复制元素即可,不需要修改算法逻辑——你之前找到的int数组旋转代码,把
int替换成char就能直接用。 - 数组克隆:使用
Clone()方法备份初始数组,重置时直接克隆备份数组即可恢复初始状态,避免引用类型的赋值问题。 - 旋转逻辑:
- 90度顺时针:原位置
(i,j)→ 目标位置(j, size-1-i) - 180度:原位置
(i,j)→ 目标位置(size-1-i, size-1-j) - 270度顺时针:原位置
(i,j)→ 目标位置(size-1-j, i)
- 90度顺时针:原位置
- switch分发:通过输入选项匹配不同的操作分支,清晰处理旋转、重置和退出逻辑。
内容的提问来源于stack exchange,提问作者Mequee
相关产品推荐
相关产品推荐

