代码之家  ›  专栏  ›  技术社区  ›  David Yancey

当超出固定数组的索引时,如何在开始时实际地重新启动

  •  0
  • David Yancey  · 技术社区  · 17 年前

    要求:

    返回日期的文件(记录)总数。

    信息:

    当前解决方案:

    [Test]
        public void FileIDModifierShouldReturn9()
        {
            var filecountfordate = 35;
            var chararray = new[]{
                                   'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R'
                                   , 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8',
                                   '9'
                               };
    
            var expected = "9";
            var actual = chararray[filecountfordate].ToString();
    
            Assert.AreEqual(expected, actual);
        }
    

    当文件计数大于数组的索引时,显然会引发异常。

    第二次测试:

    [Test]
        public void WhenFileIDModifierIsBiggerThanArrayArrayShouldStartOverAndReturnValue()
        {
            var filecountfordate = 71;
            var chararray = new[]{
                                   'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R'
                                   , 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8',
                                   '9'
                               };
            if (filecountfordate > 35)
            {
                filecountfordate = filecountfordate%36;
            }
    
            var expected = "9";
            var actual = chararray[filecountfordate].ToString();
    
            Assert.AreEqual(expected, actual);
        }
    

    我的问题是,我需要能够在数组开始时以实用的方式重新启动,而不必使用无休止的“if”语句。现在已经很晚了,我的大脑已经死了,因此我无法想出一个合理的解决方案。

    感谢您的帮助。

    1 回复  |  直到 17 年前
        1
  •  1
  •   TheVillageIdiot    17 年前

    在没有任何损失的情况下,您始终可以使用大于36的文件计数模

    [Test]
    public void WhenFileIDModifierIsBiggerThanArrayArrayShouldStartOverAndReturnVal()
    {
        var filecountfordate = 71;
        var chararray = new[]{'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 
          'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 
          'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8',
                               '9'
                           };
    
        filecountfordate = filecountfordate % chararray.Length;
    
    
        var expected = "9";
        var actual = chararray[filecountfordate].ToString();
    
        Assert.AreEqual(expected, actual);
    }