我正在尝试解决这个问题:
“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;
}
}
}
}
答案 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
{
// ...
}