更改字符串数组中的最后一个元素

时间:2015-06-21 12:49:21

标签: c# arrays string

我正在尝试解决这个问题:

“Petar喜欢玩数字。他也很喜欢弦乐。有一天他决定发明一个新的数字总和游戏。他会得到一个数字并试图将它除以5,如果数字可以没有余数的情况下划分(例如15除以5而没有余数,但是17除以5是3而余数为2)Petar会将这个数加到总和上。但是如果数不能没有余数,则只剩下剩下的完成数字之后,Petar喜欢用字符串替换一些和的数字。如果总和是奇数,他将用给定的字符串替换最后一个数字和所有其他数字。如果总和是偶数,他会做同样的,但是用第一个数字。例如,如果总和是2434,字符串是“a” - 结果将是a434。 您将获得一个起始编号,一个结束编号和一个字符串。你必须检查起始编号和结束编号之间的所有数字(没有结束编号),做Petar的算法,最后用上面描述的字符串替换数字。

输入

应从控制台读取输入数据。它由三行组成: •第一行将保留起始编号; •第二行将保留结束号码; •第三个将保留替换字符串 输入数据始终有效且采用所述格式。没有必要明确检查它。“

我当前的代码看起来是这样,它编译,但是当我输入值时,我在第49行得到一个错误,我不能使用调试因为某些原因我从VisualStudio得到一个错误,所以你能看看它吗?我:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Numerics;


namespace Petar_s_Game
{
    class Program
    {
        static void Main(string[] args)
        {
            ulong startNum = ulong.Parse(Console.ReadLine());
            ulong endNum = ulong.Parse(Console.ReadLine());
            string replacementStr = Console.ReadLine();
            List<ulong> list = new List<ulong>();
            ulong sum = 0;
            List<string> sumStrArr = new List<string>();

            for (int i = 0; startNum < endNum; startNum++)
            {
                if (startNum % 5 == 0)
                {
                    list.Add(startNum);
                }
                else
                {
                    list.Add(startNum % 5);
                }
            }
            foreach (var item in list)
            {
                sum =+ item;
            }

            string sumStr = sum.ToString();
            foreach (var item in sumStr)
            {
                sumStrArr.Add(Char.ToString(item));
            }
            if (IsEven(sum))
            {
                sumStrArr[0] = replacementStr;
            }
            if (IsEven(sum) == false)
            {
                sumStrArr[(sumStrArr.Capacity) - 1] = replacementStr;
            }
        }
        public static bool IsEven(ulong n)
        {
            if (n % 2 == 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    }
}

1 个答案:

答案 0 :(得分:3)

您正在使用List<T>.Capacity。容量是total number of elements the internal data structure can hold without resizing

您应该使用List<T>.Count来访问元素数量。

替换它:

if (IsEven(sum) == false)
{
    sumStrArr[(sumStrArr.Capacity) - 1] = replacementStr;
}

使用

if (IsEven(sum) == false)
{
    sumStrArr[sumStrArr.Count - 1] = replacementStr;
}

顺便说一下,你似乎在这里两次调用IsEven - 而不是做

if (IsEven(sum))
{
    // ...
}
if (IsEven(sum) == false)
{
    // ...
}

这样做:

if (IsEven(sum))
{
    // ...
}
else
{
    // ...
}