You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#数组与if-else实现星座识别程序的问题排查与简化需求

问题排查与简化代码

问题原因

输入7月5日得到双子座(Gemini)而非巨蟹座(Cancer),核心问题是日期范围的判断逻辑错误:

  • 巨蟹座的正确区间是6月22日-7月22日,双子座是5月21日-6月21日
  • 原代码大概率误将双子座的结束日期设为7月5日,或是把巨蟹座的起始日期设为7月6日之后,导致7月5日被错误归类到双子座区间。

简化后的代码(仅用数组+if-else)

using System;

class ZodiacIdentifier
{
    static void Main()
    {
        Console.Write("输入月份:");
        if (!int.TryParse(Console.ReadLine(), out int month) || month < 1 || month > 12)
        {
            Console.WriteLine("无效月份");
            return;
        }

        Console.Write("输入日期:");
        if (!int.TryParse(Console.ReadLine(), out int day) || day < 1 || day > DateTime.DaysInMonth(2024, month))
        {
            Console.WriteLine("无效日期");
            return;
        }

        // 统一存储星座名称与对应日期边界
        string[] zodiacs = { "Capricorn", "Aquarius", "Pisces", "Aries", "Taurus", "Gemini",
                             "Cancer", "Leo", "Virgo", "Libra", "Scorpio", "Sagittarius" };
        int[] startMonths = { 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
        int[] startDays = { 22, 20, 19, 21, 20, 21, 22, 23, 23, 23, 24, 23 };
        int[] endMonths = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
        int[] endDays = { 19, 18, 20, 19, 20, 21, 22, 22, 22, 23, 22, 21 };

        string zodiac = "未知星座";

        // 用if-else依次匹配每个星座的日期区间
        if ((month == startMonths[0] && day >= startDays[0]) || (month == endMonths[0] && day <= endDays[0]))
            zodiac = zodiacs[0];
        else if ((month == startMonths[1] && day >= startDays[1]) || (month == endMonths[1] && day <= endDays[1]))
            zodiac = zodiacs[1];
        else if ((month == startMonths[2] && day >= startDays[2]) || (month == endMonths[2] && day <= endDays[2]))
            zodiac = zodiacs[2];
        else if ((month == startMonths[3] && day >= startDays[3]) || (month == endMonths[3] && day <= endDays[3]))
            zodiac = zodiacs[3];
        else if ((month == startMonths[4] && day >= startDays[4]) || (month == endMonths[4] && day <= endDays[4]))
            zodiac = zodiacs[4];
        else if ((month == startMonths[5] && day >= startDays[5]) || (month == endMonths[5] && day <= endDays[5]))
            zodiac = zodiacs[5]; // Gemini:5.21-6.21
        else if ((month == startMonths[6] && day >= startDays[6]) || (month == endMonths[6] && day <= endDays[6]))
            zodiac = zodiacs[6]; // Cancer:6.22-7.22
        else if ((month == startMonths[7] && day >= startDays[7]) || (month == endMonths[7] && day <= endDays[7]))
            zodiac = zodiacs[7];
        else if ((month == startMonths[8] && day >= startDays[8]) || (month == endMonths[8] && day <= endDays[8]))
            zodiac = zodiacs[8];
        else if ((month == startMonths[9] && day >= startDays[9]) || (month == endMonths[9] && day <= endDays[9]))
            zodiac = zodiacs[9];
        else if ((month == startMonths[10] && day >= startDays[10]) || (month == endMonths[10] && day <= endDays[10]))
            zodiac = zodiacs[10];
        else if ((month == startMonths[11] && day >= startDays[11]) || (month == endMonths[11] && day <= endDays[11]))
            zodiac = zodiacs[11];

        Console.WriteLine($"星座:{zodiac}");
    }
}

代码说明

  1. 输入校验:新增了月份和日期的有效性判断,避免非法输入导致的错误
  2. 数组管理:将星座名称、起始/结束月日统一存入数组,减少重复代码,便于维护日期边界
  3. 逻辑修正:明确了巨蟹座(6.22-7.22)和双子座(5.21-6.21)的区间,确保7月5日能正确匹配到巨蟹座
  4. if-else逻辑:按顺序逐个匹配星座区间,逻辑直观且符合要求

内容的提问来源于stack exchange,提问作者Shinobu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 14:32:39