所以我试图让这个代码测试用户输入的单词中是否有某些字母,并确定该用户输入中有多少该特定字母。
目前aCounter,bCounter如果我输入这个词,我会得到 4 for和 4 for "aabb"。
我如何做到这一点,例如,如果有 2 个 a 并且它已经测试了2 次,则测试字母的循环会"a"停止"a"。
static int aCounter, bCounter;
public static void Main (string[] args)
{
Console.Write("Enter the secret word: ");
string word = Console.ReadLine();
for(int i = 0; word.Length > i; i++)
{
if (word.Count(letter => letter == 'a') > 0)
{
Console.WriteLine("\nThe word contains a");
aCounter++;
}
if (word.Count(letter => letter == 'b') > 0)
{
Console.WriteLine("\nThe word contains b");
bCounter++;
}
if (aCounter > 0)
{
Console.WriteLine(aCounter);
}
if (bCounter > 0)
{
Console.WriteLine(bCounter);
}
}
Run Code Online (Sandbox Code Playgroud)
您似乎将linq与循环混合
我猜这更符合你想要的(通过删除循环)
Console.Write("Enter the secret word: ");
string word = Console.ReadLine();
aCounter = word.Count(letter => letter == 'a');
bCounter = word.Count(letter => letter == 'b');
if (aCounter > 0)
Console.WriteLine($"The word contains a : {aCounter}");
if (bCounter > 0)
Console.WriteLine($"The word contains b : {bCounter}");
Run Code Online (Sandbox Code Playgroud)
输出
Enter the secret word: aabb
The word contains a : 2
The word contains b : 2
Run Code Online (Sandbox Code Playgroud)
您还可以指望所有的角色出现,并把它们放到一个字典,然后测试明确
var letters = word.GroupBy(x => x)
.ToDictionary(x => x.Key, x => x.Count());
if (letters.TryGetValue('a', out var aCount))
Console.WriteLine($"The word contains a : {aCount}");
if (letters.TryGetValue('a', out var bCount))
Console.WriteLine($"The word contains b : {bCount}");
Run Code Online (Sandbox Code Playgroud)