tin*_*tes 2 c# switch-statement
我试图设计一个程序来计算句子中的元音.
在我的代码中,我在foreach语句中使用了一个if/else if语句.我想使用switch语句转换这些代码行,但我不确定要去哪里.我需要添加新方法吗?我很感激你的帮助.
这是我到目前为止所尝试的:我检查过这个是非常错误的.在case 1例如需要有一个常数.我不确定我在这里使用什么常数.
foreach (char v in yourSentence)
{
switch (v)
{
case 1:
(v==ch1);
counta++;
j++;
break;
case 2:
(v==ch2);
counte++;
j++;
break;
case 3:
(v==ch3);
counti++;
j++;
break;
case 4:
(v==ch4);
counto++;
j++;
break;
case 5:
(v==ch3);
counti++;
j++;
break;
}
}
Run Code Online (Sandbox Code Playgroud)
另一个问题:我试图改变listBox中显示文本的颜色.这可能有不同的颜色吗?我在这里尝试的是前5(listBox1.Items.Add)是紫罗兰.并且(listBox1.Items.Add)的总和是蓝色的.但它似乎没有改变.我在这里错过了什么吗?
private void btnCount_Click(object sender, EventArgs e)
{
string yourSentence;
yourSentence = textBoxVowels.Text.ToLower().Trim();
char ch1 = 'a';
char ch2 = 'e';
char ch3 = 'i';
char ch4 = 'o';
char ch5 = 'u';
int counta = 0;
int counte = 0;
int counti = 0;
int counto = 0;
int countu = 0;
int j = counta + counte + counti + counto + countu;
foreach (char v in yourSentence)
{
if (v == ch1) { counta++; j++; }
else if (v == ch2) { counte++; j++; }
else if (v == ch3) { counti++; j++; }
else if (v == ch4) { counto++; j++; }
else if (v == ch5) { countu++; j++; }
}
listBox1.Items.Add("There are " + counta.ToString().Trim() + " a's in the sentence");
listBox1.Items.Add("There are " + counte.ToString().Trim() + " e's in the sentence");
listBox1.Items.Add("There are " + counti.ToString().Trim() + " i's in the sentence");
listBox1.Items.Add("There are " + counto.ToString().Trim() + " o's in the sentence");
listBox1.Items.Add("There are " + countu.ToString().Trim() + " u's in the sentence");
listBox1.Font = new Font("Arial", 12, FontStyle.Bold);
listBox1.ForeColor = Color.Violet;
listBox1.Items.Add("There are " + j.ToString().Trim() + " vowels in the sentence");
listBox1.ForeColor = Color.Blue;
}
private void btnClear_Click(object sender, EventArgs e)
{
textBoxVowels.Text = null;
listBox1.Items.Clear();
}
Run Code Online (Sandbox Code Playgroud)
或者通过使用一些LINQ来简化整个问题.:)
public static int CountVowels(this string value)
{
const string vowels = "aeiou";
return value.Count(chr => vowels.Contains(char.ToLower(chr)));
}
Run Code Online (Sandbox Code Playgroud)
该Count扩展方法是特别适合于该任务.另外,请注意使用一串所有元音来检查每个字符 - 比switch语句简单得多.
注意:似乎我错过了你想要单独计算每个元音的事实.在这种情况下,LINQ变得有点复杂(至少如果你想有效地做到这一点),但我会把它作为练习给你.无论如何,switch语句可能是学习C#基础知识的好方法.
由于您可能对switch语句感到好奇,因此以下代码使用了正确的语法:
foreach (var chr in sentence)
{
switch (chr)
{
case 'a':
...
break;
case 'e':
...
break;
case 'i':
...
break;
case 'o':
...
case 'u':
...
break;
}
}
Run Code Online (Sandbox Code Playgroud)
我想你误解了'开关/案例'是如何工作的.只需将它们更改为:
case 'a':
counta++;
j++;
break;
Run Code Online (Sandbox Code Playgroud)
Case需要一个应与当前字符进行比较的常量值.