如何移除星座识别代码中的break语句?仅限数组、for循环、if else实现
移除break语句的C#星座识别代码修改方案
原代码依赖break语句终止循环来确定星座,现在要移除break,同时保留功能正常,修改后的代码和思路如下:
原代码
Console.WriteLine("ZODIAC SIGN"); Console.WriteLine(""); string[] zodiacsign = { "Aquarius", "Pisces", "Aries", "Taurus", "Gemini", "Cancer", "Leo", "Virgo", "Libra", "Scorpio", "Sagittarius", "Capricorn" }; int[] signmonth = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }; int[] signday = { 19, 18, 20, 19, 20, 20, 22, 22, 22, 21, 21, 21 }; Console.Write("Enter the month (1 to 12): "); int month = int.Parse(Console.ReadLine()); Console.WriteLine(""); Console.Write("Enter the day: "); int day = int.Parse(Console.ReadLine()); Console.WriteLine(""); string zodiacsignfinal = ""; for (int i = 0; i < zodiacsign.Length; i++) { int currentmonth = signmonth[i]; int currentday = signday[i]; int nextmonth = signmonth[(i + 1) % signmonth.Length]; int nextday = signday[(i + 1) % signday.Length]; if ((month == currentmonth && day >= currentday) || (month == nextmonth && day < nextday)) { zodiacsignfinal = zodiacsign[i]; break; } } if (zodiacsignfinal != "") { Console.WriteLine("Your zodiac sign is: " + zodiacsignfinal); } else { Console.WriteLine("YOU ENTERED WRONG DATA"); } Console.ReadLine();
修改后的代码
Console.WriteLine("ZODIAC SIGN"); Console.WriteLine(""); string[] zodiacsign = { "Aquarius", "Pisces", "Aries", "Taurus", "Gemini", "Cancer", "Leo", "Virgo", "Libra", "Scorpio", "Sagittarius", "Capricorn" }; int[] signmonth = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }; int[] signday = { 19, 18, 20, 19, 20, 20, 22, 22, 22, 21, 21, 21 }; Console.Write("Enter the month (1 to 12): "); int month = int.Parse(Console.ReadLine()); Console.WriteLine(""); Console.Write("Enter the day: "); int day = int.Parse(Console.ReadLine()); Console.WriteLine(""); string zodiacsignfinal = ""; for (int i = 0; i < zodiacsign.Length; i++) { int currentmonth = signmonth[i]; int currentday = signday[i]; int nextmonth = signmonth[(i + 1) % signmonth.Length]; int nextday = signday[(i + 1) % signday.Length]; // 只在未找到星座时执行匹配判断,避免覆盖已找到的结果 if (zodiacsignfinal == "" && ((month == currentmonth && day >= currentday) || (month == nextmonth && day < nextday))) { zodiacsignfinal = zodiacsign[i]; } } if (zodiacsignfinal != "") { Console.WriteLine("Your zodiac sign is: " + zodiacsignfinal); } else { Console.WriteLine("YOU ENTERED WRONG DATA"); } Console.ReadLine();
修改思路
原来的break是找到匹配的星座后立刻终止循环,现在我们通过在判断条件中加入zodiacsignfinal == "",确保只有在还没找到正确星座的时候才会执行赋值操作。即使循环继续跑完所有12个星座,后续的判断也不会修改已经找到的zodiacsignfinal值,最终结果和原来一致,同时完全移除了break语句,符合任务要求。
内容的提问来源于stack exchange,提问作者Yuta Ruitzu
相关产品推荐
相关产品推荐

