嗨我正在創建一個控制檯應用程序,用戶輸入一個月的數字,應用程序計算出它的月份並顯示答案並顯示當月的天數。當switch語句在Main方法中時,我使用它,但是現在它顯示錯誤的月份。我有以下代碼:在Enum C中使用Switch語句#
namespace ConsoleCA2{
public enum Months
{
January = 31,
February = 28,
March = 31,
April = 30,
May = 31,
June = 30,
July = 31,
August = 31,
September = 30,
October = 31,
November = 30,
December = 31
};
public class Program
{
public const string NEWLINE = "\n"; //constant for new line
static void Main(string[] args)
{
try
{
//prompt user for month number.
Console.Write("Enter a Number to find out what Month it is: ");
//convert users answer to integer
int userInput = Convert.ToInt16(Console.ReadLine());
//declare and initalise
int daysInMonth = 0;
string answer = String.Empty;
//call relevent calculation methods
answer = DetermineMonth(userInput);
daysInMonth = DetermineDaysInMonth(userInput);
//Write users answer to screen
Console.WriteLine(answer);
//Prompt user, whether they want to know number of days in the
//month
Console.Write("Would you like to know the number of days in" +
" {0}: ", answer);
//assign users answer to variable
string userAnswer = Console.ReadLine();
//Output answer if needed.
if (userAnswer == "yes".Trim().ToLower())
{
Console.WriteLine("The number of days in {0} is: {1}",
answer, daysInMonth.ToString());
}
else if (userAnswer == "no".Trim().ToLower())
{
Console.WriteLine(NEWLINE);
Console.WriteLine("You answered No, Have a good day!");
}
else
{
Console.WriteLine("Please answer yes or no.");
}
Console.Read(); //Pauses screen for user
}
//catch any errors.
catch (Exception err)
{
Console.WriteLine("Error" + err.Message);
}
}
/// <summary>
/// Determines What month the use enters and returns string value
/// </summary>
/// <param name="userInput"></param>
/// <returns>returns the month as string</returns>
public static String DetermineMonth(int userInput)
{
switch (userInput)
{
case 1:
return Months.January.ToString();
case 2:
return Months.February.ToString();
case 3:
return Months.March.ToString();
case 4:
return Months.April.ToString();
case 5:
return Months.May.ToString();
case 6:
return Months.June.ToString();
case 7:
return Months.July.ToString();
case 8:
return Months.August.ToString();
case 9:
return Months.September.ToString();
case 10:
return Months.October.ToString();
case 11:
return Months.November.ToString();
case 12:
return Months.December.ToString();
default:
return "Error";
}
}
/// <summary>
/// Determines how many days is in selected month as integer
/// </summary>
/// <param name="userInput"></param>
/// <returns>returns how many days in month</returns>
public static int DetermineDaysInMonth(int userInput)
{
switch (userInput)
{
case 1:
return Convert.ToInt16(Months.January);
case 2:
return Convert.ToInt16(Months.February);
case 3:
return Convert.ToInt16(Months.March);
case 4:
return Convert.ToInt16(Months.April);
case 5:
return Convert.ToInt16(Months.May);
case 6:
return Convert.ToInt16(Months.June);
case 7:
return Convert.ToInt16(Months.July);
case 8:
return Convert.ToInt16(Months.August);
case 9:
return Convert.ToInt16(Months.September);
case 10:
return Convert.ToInt16(Months.October);
case 11:
return Convert.ToInt16(Months.November);
case 12:
return Convert.ToInt16(Months.December);
default:
return 0;
}
}
老switch語句是這樣的:
switch (userInput)
{
case 1:
answer = Months.January.ToString();
daysInMonth = Convert.ToInt16(Months.January);
break;
case 2:
answer = Months.February.ToString();
daysInMonth = Convert.ToInt16(Months.February);
break;
case 3:
answer = Months.March.ToString();
daysInMonth = Convert.ToInt16(Months.March);
break;
case 4:
answer = Months.April.ToString();
daysInMonth = Convert.ToInt16(Months.April);
break;
case 5:
answer = Months.May.ToString();
daysInMonth = Convert.ToInt16(Months.May);
break;
case 6:
answer = Months.June.ToString();
daysInMonth = Convert.ToInt16(Months.June);
break;
case 7:
answer = Months.July.ToString();
daysInMonth = Convert.ToInt16(Months.July);
break;
case 8:
answer = Months.August.ToString();
daysInMonth = Convert.ToInt16(Months.August);
break;
case 9:
answer = Months.September.ToString();
daysInMonth = Convert.ToInt16(Months.September);
break;
case 10:
answer = Months.October.ToString();
daysInMonth = Convert.ToInt16(Months.October);
break;
case 11:
answer = Months.November.ToString();
daysInMonth = Convert.ToInt16(Months.November);
break;
case 12:
answer = Months.December.ToString();
daysInMonth = Convert.ToInt16(Months.December);
break;
default:
answer = "Error";
break;
}
哪些工作,直到我換到不同的方法,然後它去下坡從那裏。現在,即使我把它放回去,它仍然會讓幾個月混在一起?
如此混亂:S
預先感謝您的幫助......如果你能理解亂碼:對
看來你使用枚舉有點創意。除此之外,第二個月的長度不能存儲。看看DateTime,它會給你更多的可能性來做月份長度和日期時間的計算。 – Peter
基本上@佩爾說的。更具體地說,看看[DateTime.DaysInMonth](http://msdn.microsoft.com/library/system.datetime.daysinmonth.aspx)。如果您(出於某種原因)不喜歡使用內置功能,請查看卓越的[noda-time](https://code.google.com/p/noda-time/)。截至目前,您二月的價值是錯誤的(取決於年份)。 – Corak
你爲什麼不使用字典?代碼將會更短,更簡單和更直接 –