c# - 如何按以下顺序显示月份名称

标签 c# algorithm data-structures

我处于一种情况,我必须编写代码来打印给定时间间隔内涵盖的所有月份的名称。 将有 4 种方式显示这些间隔名称。

(1.) 每年(1 个周期)

(2.) 半年一次(6 个周期)

(3.) 每季度(3 个周期)

(4.) 每月(12 个周期)

用户给出了 3 个输入,一个是开始日期,另一个是周期。因此,月份名称显示必须从用户选择的 startDate 月份开始,并且必须在他输入的周期结束,第三个输入将是 checkBoxSelecionStatus,他将在其中输入“Monthly”(12)、“Yearly”(1)、“Quarterly” (3)、《半年刊》(6)。所以这个 checkBoxSelecionStatus 将决定 getMonthByDescription() 函数

中 for 循环的索引跳过

现在必须输出什么:

(1) 当用户在 checkBoxSelecionStatus 中选择“每月”时,numOfCycles 变量的值为 12,startDate 为 3(startDate=3 表示它从 3 月 1 日开始到接下来的 12 个周期(numOfCycle),即明年的 3 月).那么输出应该是这个间隔内的所有 12 个月。所以就是 输出是:

Mar
*****
Apr
*****
May
*****
Jun
*****
Jul
*****
Aug
*****
Sep
*****
Oct
*****
Nov
*****
Dec
*****
Jan
*****
Feb
*****

(2)现在,当用户在 cycle=12 中选择“SemiAnually”时,它必须显示

Mar-Aug
*****
Sept-Feb
*****

(3) 现在当用户在 cycle=12 中选择“Quaterly”时,它必须显示:

Mar-May
*****
Jun-Aug
*****
Sep-Nov
*****
Dec-Feb
***** 

(4) 现在当用户在 12 周期中选择“每年”时,它必须显示:

Mar-Feb
*****

用户可以不输入 int startDate = 3;每时每刻。他可以输入 startDate = 1;(这里的月份显示将从第 1 个月开始,即 Jan)或者他可以输入任何 startDate,因此代码必须适用于所有人。

注意:请注意,任何情况下所需的部分都不会错。如果是季度,我必须有 3,因为一年中有 4 个季度的“3”(它基于我软件的其他计算)所以当用户选择“季度”时,它必须显示“jan-mar”(如果开始日期是第一个 jan) 然后是 apr-jun 然后是 jul-sep 然后是 oct-dec。类似地每半年 jan-jun 然后 jul-dec

最佳答案

这是您修改后的代码。它只是将当前间隔提前指定的间隔长度。没什么特别的:

private static string[] getMonthByDescription(int startMonth, int startYear, int numcycle)
{
    startMonth -= 1; //zero-based index

    int intervalLength = 0;
    switch (checkBoxSelecionStatus)
    {
        case "Monthly": intervalLength = 1; break;
        case "Quarterly": intervalLength = 3; break;
        case "SemiAnually": intervalLength = 6; break;
        case "Yearly": intervalLength = 12; break;
    }
    if (intervalLength == 0)
        throw new ArgumentException();

    int intervals = numcycle / intervalLength;
    string[] arrOfMonthName = new string[intervals];

    for(int i = 0; i < intervals; ++i)
    {
        if (intervalLength > 1)
        {
            var intervalEnd = startMonth + intervalLength - 1;
            var intervalEndYear = startYear;
            if (intervalEnd >= 12)
            {
                intervalEnd -= 12;
                ++intervalEndYear;
            }
            arrOfMonthName[i] = monthNames[startMonth] + " " + startYear + " - " + monthNames[intervalEnd] + " " + intervalEndYear;
        }
        else
            arrOfMonthName[i] = monthNames[startMonth] + " " + startYear;
        startMonth += intervalLength; //go to the next interval
        if (startMonth >= 12)
        {
            startMonth -= 12;
            ++startYear;
        }
    }

    return arrOfMonthName;
}

关于c# - 如何按以下顺序显示月份名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36666595/

相关文章:

c# - 具有字典的嵌套类的 XML 序列化

c# - 如果外键缺失,自动添加数据

c# - 使用 CLR C++ 包装器从 C# 应用程序在 C++ 中加载 SDL 窗口不起作用

c# - 尝试在 blobstorage 触发函数中引用 CloudBlockBlob 时出现编译错误

algorithm - 在二维轮廓中查找关键点

algorithm - 什么是近完全二叉树?

algorithm - 枚举搜索树

python - 实现无约束优化问题的回溯线搜索算法

php - 存储相似音乐的最佳方式

c - 需要一些关于 C 中树的解释