当我输入我的程序名字时,我很难理解为什么我得到25岁。它应该计算元音,上次我检查追逐只有2.这里也是picture of assignment。
/* Program : Ch5Ex12a - CountVowels
* Programmer : Chase Mitchell
* Date : 11/18/2015
* Description : User's vowels are counted
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Ch5Ex12a
{
class Program
{
static void Main(string[] args)
{
int bacon=0;
string Phrase;
Console.WriteLine("Enter in letters");
Phrase = Console.ReadLine();
foreach (char a in Phrase)
bacon += 1;
foreach (char e in Phrase)
bacon += 1;
foreach (char i in Phrase)
bacon += 1;
foreach (char o in Phrase)
bacon += 1;
foreach (char u in Phrase)
bacon += 1;
Console.WriteLine(bacon);
Console.ReadKey();
}
}
}
答案 0 :(得分:9)
foreach (char a in Phrase)
bacon += 1;
您认为这有什么作用?这不迭代'a'
中的所有Phrase
个字符。相反,它会迭代Phase
中的所有字符并计算它们。只是在每次迭代中为每个字符分配的变量名称称为a
。但这与内容无关。
您尝试过这样的事情:
foreach (char c in Phrase)
{
if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u')
bacon += 1;
}
您还应检查大写字符;显式或首先将Phrase
转换为小写。您可以通过循环Phrase.ToLower()
而不是Phrase
来完成此操作。
答案 1 :(得分:3)
您的问题出在以下代码中:
foreach (char a in Phrase)
bacon += 1;
它的作用:
答案 2 :(得分:2)
首先,为什么你的变量叫bacon
?您应该将其称为有意义的内容,例如numVowels
。
其次,foreach
声明并不像您期望的那样发挥作用。
foreach (char a in Phrase)
bacon += 1;
这并不是说"对于短语中的每个A,添加一个到培根"。它实际上说的是,对于短语中的每个 thing (在这种情况下每个字符)将它存储在一个临时变量中(你将其称为e,i,o和u)并做某事(在这种情况下:在你的柜台加一个)。因此,您获得25的原因是您正在进行5个相同的循环,每个循环为计数器添加一个循环(5 x 5 = 25)。
你真正想做的是一个foreach
并比较每个角色,看它是否是一个元音:
foreach (char character in Phrase) {
if (character == 'a' || character == 'e' || ... ) {
numVowels += 1;
}
}
答案 3 :(得分:0)
建立一个vowelList数组。如果vowelList包含c,则增加培根计数。
String vowelList = "aeiou";
foreach (char c in Phrase)
{
if(vowelList.Contains(c))
bacon += 1;
}
答案 4 :(得分:0)
好吧,循环遍历字符串并计算。要避免代码中出现 mess (以及错误),请尝试不要将所有代码塞入一个Main
方法。
// Model: what is/are vowel.
// So if you're asked to count vowels in, say, Russian you know what to change
private static HashSet<Char> s_Vowels = new HashSet<Char>() {
'a', 'e', 'i', 'o', 'u', // is 'w' considered being vowel?
'A', 'E', 'I', 'O', 'U',
};
// Routine: count vowels in a given phrase
// No input/output here, so it will work in WinForms, Command Line, ASP...
private static int CountVowels(String phrase) {
if (String.IsNullOrEmpty(phrase))
return 0;
int result = 0;
foreach (char letter in phrase)
if (s_Vowels.Contains(letter))
result += 1;
return result;
}
// Input/output
static void Main(string[] args) {
Console.WriteLine("Enter in letters");
string Phrase = Console.ReadLine();
Console.WriteLine(String.Format("It contains {0} vowels.", CountVowels(Phrase)));
}
修改:如果你故意 ,你的初始代码有一行using System.Linq;
,并且你被允许使用 Linq ,例程可以缩短:
private static int CountVowels(String phrase) {
if (String.IsNullOrEmpty(phrase))
return 0;
else
return phrase.Count(letter => s_Vowels.Contains(letter));
}