首页 > 解决方案 > 有人可以说我在 C# 任务中做错了什么吗?

问题描述

我需要在字符串数组中创建对称字母“W”

get_w() 是应该返回包含字母“W”的字符串数组的方法

get_w(5) # 应该返回:

public string[] GetW(int h)
        {
            if (h < 2) return new string[h];
            int row = 0;
            int stars_number = h * 4 - 3;
            int times = 0;
            StringBuilder[] c = new StringBuilder[h];
            for(int a = 0; a < h; a++)
            {
                c[a] = new StringBuilder();
                c[a].Length = stars_number;
            }
            for (int i = 0; i < stars_number; i++)
            {
                if (i == h - 1) times = 1;
                if (i == stars_number-2 * h + 1) times = 2;
                if (i == stars_number - h) times = 3;
                c[row][i] = '*';
                if (row < h - 1 && (times == 0 || times == 2))
                {
                    row += 1;
                    
                }
                else
                {
                    row -= 1;
                    
                }
                
            }
            string []str = new string[h];
            for(int i = 0; i < h; i ++)
            {
                str[i] = c[i].ToString();
               
            }
            
            return str;
          
        }

如果我在 VS 中编译它,我不会收到任何错误。这是一个结果示例

此任务取自 Codewars,但如果我尝试使用上面描述的代码在 Codewars 上进行测试,我会收到此错误

编辑:我将返回数组的“h”长度更改为空数组并得到了这个

标签: c#stringbuilder

解决方案


我通过用字符 ' ' 替换等于 '\0' 的章程找到了任务解决方案,这是工作代码

public string[] GetW(int h)
        {
            if (h < 2) return new string[]{};
            int row = 0;
            int stars_number = h * 4 - 3;
            int times = 0;
            StringBuilder[] c = new StringBuilder[h];
            for(int a = 0; a < h; a++)
            {
                c[a] = new StringBuilder();
                c[a].Length = stars_number;
            }
            for (int i = 0; i < stars_number; i++)
            {
                if (i == h - 1) times = 1;
                if (i == stars_number-2 * h + 1) times = 2;
                if (i == stars_number - h) times = 3;
                c[row][i] = '*';
                if (row < h - 1 && (times == 0 || times == 2))
                {
                    row += 1;
                    
                }
                else
                {
                    row -= 1;
                    
                }
                
            }
            string []str = new string[h];
            for(int i = 0; i < h; i ++)
            {
                c[i].Replace('\0', ' ');
                str[i] = c[i].ToString();
               
            }
            
            return str;
          
        }

这是测试结果 在此处输入图像描述


推荐阅读