C# 基于变量的第n个字符未按预期工作
所以我有pow-一个包含数字的列表。我必须检查其他类似的数字:获取所有数字,并将pow中与特定数字具有相同索引的数字相加 所以如果我查4552,我需要得到pow[4]+pow[5]+pow[5]+pow[2]。因为我是一个noob,所以我尝试将数字转换为字符串,使用循环获取字符,然后再转换回int以获取索引。因此,代码如下所示,用于获得4550和4559之间的总和:C# 基于变量的第n个字符未按预期工作,c#,.net,implicit-conversion,C#,.net,Implicit Conversion,所以我有pow-一个包含数字的列表。我必须检查其他类似的数字:获取所有数字,并将pow中与特定数字具有相同索引的数字相加 所以如果我查4552,我需要得到pow[4]+pow[5]+pow[5]+pow[2]。因为我是一个noob,所以我尝试将数字转换为字符串,使用循环获取字符,然后再转换回int以获取索引。因此,代码如下所示,用于获得4550和4559之间的总和: for (int i = 4550; i < 4560; i++) {
for (int i = 4550; i < 4560; i++)
{
int sum = 0;
for (int j = 0; j < i.ToString().Length; j++)
{
sum += pows[Convert.ToInt32(i.ToString()[j])]; //here is the error - index was out of range
//do something with sum (like store it in another list)
}
}
那么这有什么错呢
编辑:为了避免混淆。。。pow有10个元素,从索引0到9
解决方案:我的代码的问题是我得到的是字符代码,而不是数字本身,谢谢Steve Lillis。虽然Dmitry Bychenko提供的解决方案比我的尝试要好得多。谢谢大家。这段代码只包含一个字符,如“4”,即字符代码59:
c = i.ToString()[j]
然后,这段代码将该字符转换为整数。它不像您期望的那样解析它,因此“4”的结果是59,而不是4:
Convert.ToInt32(c)
改为这样做:
int.Parse(c.ToString())
您所寻找的类似于: C中的模数%比转换为字符串更简单、更快:
像这样又快又脏的尝试
int currentDigit;
int sum;
for (int i = 4550; i < 4560; i++)
{
sum = 0;
currentDigit = i;
while (currentDigit > 0)
{
if (pow.Count > (currentDigit % 10))
{
sum += pow[((currentDigit % 10))];
}
}
}
请注意,列表具有从零开始的索引,因此当您执行pow[1]时,实际上正在访问列表中的第二个元素。这就是你想要的吗?哇,真奇怪。当尝试sum+=…时,它再次死机,并出现相同的错误。。。但是我放了一个控制台;得到49分?!更新了我的答案,因为我刚刚意识到发生了什么:
int currentDigit;
int sum;
for (int i = 4550; i < 4560; i++)
{
sum = 0;
currentDigit = i;
while (currentDigit > 0)
{
if (pow.Count > (currentDigit % 10))
{
sum += pow[((currentDigit % 10))];
}
}
}