如何在C#二维数组中为反对角线行列设置颜色?
二维数组反对角线黄色高亮实现方案
你的代码核心问题是DisplayMatrixWithCross方法中缺少反对角线的判断逻辑,且未正确处理控制台颜色重置,导致效果无法实现。以下是修正后的完整代码及关键说明:
修正后的DisplayMatrixWithCross方法
void DisplayMatrixWithCross(int[,] matrix) { Console.WriteLine(); int rowCount = matrix.GetLength(0); int colCount = matrix.GetLength(1); for (int rows = 0; rows < rowCount; rows++) { for (int columns = 0; columns < colCount; columns++) { // 重置控制台默认颜色,避免颜色残留 Console.ResetColor(); if (rows == columns) { // 主对角线:红色前景色 Console.ForegroundColor = ConsoleColor.Red; Console.Write($"{matrix[rows, columns]:00} "); } else if (columns == colCount - 1 - rows) { // 反对角线:黄色背景+黑色前景,提升可读性 Console.BackgroundColor = ConsoleColor.Yellow; Console.ForegroundColor = ConsoleColor.Black; Console.Write($"{matrix[rows, columns]:00} "); } else { // 默认白色前景色 Console.ForegroundColor = ConsoleColor.White; Console.Write($"{matrix[rows, columns]:00} "); } } // 每行结束后重置颜色,确保下一行不受影响 Console.ResetColor(); Console.WriteLine(); } }
关键修正点说明
- 反对角线定位逻辑:用
columns == colCount - 1 - rows精准定位反对角线元素,该公式适配方阵和矩形矩阵,自动跳过不存在的元素(如矩形矩阵中超出列范围的情况)。 - 颜色重置处理:每次输出前调用
Console.ResetColor(),避免上一个元素的颜色设置影响当前元素;每行结束后再次重置,确保后续输出不受干扰。 - 可读性优化:反对角线采用黄色背景搭配黑色前景,解决了黄色背景与白色前景对比度低、不易阅读的问题。
- 代码简洁性:提取行列数到变量
rowCount和colCount,减少重复计算,提升代码可读性。
内容的提问来源于stack exchange,提问作者HelloThere34
相关产品推荐
相关产品推荐

