C#开发按单词元音数升序排序方法及单元测试报错修复
问题根因
两处代码不匹配直接触发Letters重载不匹配的编译报错,且现有逻辑未实现核心排序需求:
- 原
Letters方法为无参定义,返回值类型为string,但测试代码调用时传入了参数,还将返回值赋值给int类型变量,既无匹配的方法重载,也存在类型不兼容问题,这就是编译报错的直接触发点(报错提示里提到传入参数为1,本质也是传入值与现有无参方法不匹配,找不到对应重载) - 原Vowels类内的代码为完全无效的逻辑:初始化仅含单个元素的字符串数组做无意义排序,未实现拆分、统计元音、排序的核心流程
修正后的业务类实现
调整方法签名匹配调用规则,补充完整的元音统计、排序逻辑:
- 方法定义调整为接收string类型输入参数,返回排序后的string结果
- 内置兼容大小写的元音集合(aeiouy)
- 拆分输入文本的独立句段,保留原句段的标点
- 统计每个句段的元音字符总数,按数量升序排序后拼接为最终结果
using System.Text.RegularExpressions; using System.Collections.Generic; using System.Linq; public class Vowels { private readonly HashSet<char> _vowels = new("aeiouyAEIOUY"); public string Letters(string input) { if (string.IsNullOrWhiteSpace(input)) return string.Empty; // 按句末标点拆分,保留标点归属对应句段 var segments = Regex.Split(input, @"(?<=[!?\.])\s+") .Where(seg => !string.IsNullOrWhiteSpace(seg)); // 按元音数量升序排序 var sortedSegments = segments.OrderBy(seg => seg.Count(ch => _vowels.Contains(ch)) ); return string.Join(" ", sortedSegments); } }
修正后的单元测试代码
修正类型不匹配问题,调整预期结果与实际逻辑对齐:
using Microsoft.VisualStudio.TestTools.UnitTesting; [TestClass] public class VowelsTests { [TestMethod] public void MethodSort_vowels_in_ascending_order() { string input = "Teest! Test!"; // 逻辑校验:Test!含1个元音(e),Teest!含2个元音(ee),升序排列后Test!在前 string expected = "Test! Teest!"; Vowels vowelsProcessor = new Vowels(); // 修正返回值接收类型为string,与方法返回值匹配 string actual = vowelsProcessor.Letters(input); Assert.AreEqual(expected, actual); } }
补充提示:原测试代码中的预期值漏掉了Teest对应的感叹号,会导致断言不通过,修正后需和实际输出的标点完全对齐。
内容的提问来源于stack exchange,提问作者on1
相关产品推荐
相关产品推荐

