我是一所大学的一年级学生,该学院非常重视自我学习(SCRUM),没有任何经典课程。 因此,我基本上从这样的网站中学到了我所知道的一切。 我不要有任何不良习惯或错误的理解。 那么,这段代码好吗? 我不是在寻求优化(尽管不介意任何技巧;)),因为我会随着时间的流逝而学习,而是要了解总体结构和思维方式是否正确。
static void Main(string[] args)
{
string repeat;
//do while loop for if the user wants to run the program again
do
{
//asigns variables
string text;
int vowels, consonants, numbers, otherSymbols;
var hsVowels = new HashSet<char> { 'a', 'e', 'i', 'o', 'u' };
var hsConsonants = new HashSet<char> { 'b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'y', 'z'};
var hsNumbers = new HashSet<char> { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
//asks for input
Console.WriteLine("Input anything and the program wil tell you how many vowels, consonants, numbers and other symbols you gave.");
text = Console.ReadLine().ToLower();
//calculates
vowels = text.Count(c => hsVowels.Contains(c));
consonants = text.Count(c => hsConsonants.Contains(c));
numbers = text.Count(c => hsNumbers.Contains(c));
otherSymbols = text.Length - (vowels + consonants + numbers);
//shows the result
Console.WriteLine("Your input has {0} vowels, {1} consonants, {2} numbers and {3} other Symbols.", vowels, consonants, numbers, otherSymbols);
//asks if the user wants to run the program again
Console.WriteLine("Would you like to try again? (yes/no)");
repeat = Console.ReadLine();
//tests if the users input was valid (yes/no)
while (!(repeat.ToLower().Contains("yes") || repeat.ToLower().Contains("no")))
{
Console.WriteLine(@"Invalid input. Please answer ""yes"" or ""no"" .");
repeat = Console.ReadLine();
}
} while (repeat.ToLower().Contains("yes"));
}
我不知何故无法使代码示例将我的代码识别为C#。 如果有人能告诉我怎么做,将不胜感激!
答案 0 :(得分:0)
我已经测试了代码,并且可以正常工作。很好:-)
如Sellotape所建议,将其发布在建议的网站中可能是个好主意。
话虽如此,但我对您的代码进行了一些更改,以使其更具可读性并减少重复:
使用while循环并在进入循环之前设置条件变量。您将至少执行一个周期:
string repeat = "yes";
//Main loop
while (repeat.Contains("yes"))
单行变量声明。我个人不建议这样做。通过在一行中同时声明一个变量,可以更容易阅读:
string inputText;
int howManyVowels;
int howManyConsonants;
int howManynumbers;
int howManySymbols;
从上面您可以看到,我尝试使用命名尽可能明确。命名时不要害怕冗长。命名合理的变量很容易说明,并且显示了意图。
使用var。关于它有很多意见。在编写好的代码中,我个人认为必须尽量减少使用var。在这种情况下,因为右侧是不言而喻的,所以可以。但是,最好显示左侧类型。
List<char> listOfVowels = new List<char> { 'a', 'e', 'i', 'o', 'u' };
这只是我的偏爱。使用List代替HashSet。由于我们实际上并不关心性能-在这种情况下-使用List突出了我们正在处理char列表的事实。
最后一点,如果需要检查小写响应,则在初始化它时设置重复变量ToLower():
repeat = Console.ReadLine().ToLower()
希望有帮助。