我现在正在学习C#,但仍然是初学者。
在练习创建方法时,我创建了这个方法,它产生了数值数组成员的总和(我的代码很大,而且我不擅长数学)。 VS返回ArgumentOutOfRangeException错误,但我不知道如何解决这个问题。 请救救我!
public static int SumAll(int[] a)
{
List<int> sum = new List<int>();
int sumAll;
if (a.Length == 0)
{
sumAll = 0;
}
else
{
sum[0] = a[0];
for (int i = 1; i < (a.Length - 1); i++)
{
sum[i] = sum[i - 1] + a[i];
}
sumAll = sum[a.Length - 1];
}
return sumAll;
}
答案 0 :(得分:0)
使用 + = addition assignment operator:
public static int SumAll(int[] a)
{
int sumAll = 0;
for (int i = 0; i < (a.Length - 1); i++)
{
sumAll += a[i];
}
return sumAll;
}
ArgumentOutOfRangeException通常与数组,集合或列表范围之外的项目有关。因为您使用List<int> sum
而不是向其添加项目。 sum.Add(a[i]);
这就是你得到例外的原因; sum变量没有任何项目。
答案 1 :(得分:0)
您获得该异常的原因是因为您尝试为List中的索引分配一个当前执行此操作时尚不存在的索引:
# your array
arr = [255, 216, 255, 224, 0, ...]
>>> bytearray(arr[:4])
bytearray(b'\xff\xd8\xff\xe0')
相反,您应该使用FF D8 FF E0
方法将项目添加到列表中。添加后,您可以通过索引访问它们。这样做的原因是列表没有预先填充到任何设置大小(而数组是),所以首先f = open('/tmp/myimage.jpeg', 'wb')
f.write(bytearray(arr))
f.close()
没有任何内容。
sum[0] = a[0];
你也会在这里得到这个例外:
.Add
这是因为[0]
列表只包含sum.Add(a[0]);
项(您的循环在sumAll = sum[a.Length - 1];
时停止)。这是您的代码中的错误!您应该使用sum
作为条件:
a.Length - 2
这样您就可以遍历所有 i == a.Length - 1
数组中的项目。
您的方法看起来像这样(注意我还添加了对i < a.Length
的检查):
for (int i = 1; i < a.Length; i++)
现在,如果您愿意,可以简化此代码,方法是删除列表,从a
开始,然后在循环中将a == null
中的每个项目添加到其中:
public static int SumAll(int[] a)
{
if (a == null) return 0;
List<int> sum = new List<int>();
int sumAll;
if (a.Length == 0)
{
sumAll = 0;
}
else
{
sum.Add(a[0]);
for (int i = 1; i < a.Length; i++)
{
sum.Add(sum[i - 1] + a[i]);
}
sumAll = sum[a.Length - 1];
}
return sumAll;
}
或者您可以使用sumAll = 0
扩展方法a
来真正缩短它:
public static int SumAll(int[] a)
{
if (a == null) return 0;
int sumAll = 0;
for (int i = 0; i < a.Length; i++)
{
sumAll += a[i];
}
return sumAll;
}