我的C#代码中的ArgumentOutOfRangeException错误
这些天我在学C#,还是个初学者 在练习创建方法时,我创建了这个方法,它可以生成数字数组成员的总和(我的代码太多,我的数学不好)。 VS返回ArgumentOutOfRangeException错误,但我不知道如何修复此错误。 请救救我我的C#代码中的ArgumentOutOfRangeException错误,c#,indexoutofrangeexception,C#,Indexoutofrangeexception,这些天我在学C#,还是个初学者 在练习创建方法时,我创建了这个方法,它可以生成数字数组成员的总和(我的代码太多,我的数学不好)。 VS返回ArgumentOutOfRangeException错误,但我不知道如何修复此错误。 请救救我 public static int SumAll(int[] a) { List<int> sum = new List<int>(); int sumAll; if (a.
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;
}
publicstaticintsumall(int[]a)
{
列表总和=新列表();
内苏马尔;
如果(a.Length==0)
{
sumAll=0;
}
其他的
{
和[0]=a[0];
对于(int i=1;i<(a.长度-1);i++)
{
和[i]=和[i-1]+a[i];
}
sumAll=总和[a.长度-1];
}
返回sumAll;
}
使用+=:
publicstaticintsumall(int[]a)
{
int-sumAll=0;
对于(int i=0;i<(a.Length-1);i++)
{
sumAll+=a[i];
}
返回sumAll;
}
ArgumentOutOfRangeException通常用于处理数组、集合或列表范围之外的项。。因为您使用的是
列表总和
,所以您没有向其中添加项目<代码>总和加(a[i])代码>这就是为什么会出现异常;sum变量没有任何项。出现该异常的原因是,当您执行此操作时,试图为列表中尚不存在的索引赋值:
sum[0] = a[0];
相反,您应该只使用.Add
方法将项目添加到列表中。一旦添加了它们,您就可以通过索引访问它们。原因是列表没有预先填充到任何设置大小(而数组是),因此首先在[0]
中没有任何内容
sum.Add(a[0]);
您还将在此处获得此异常:
sumAll = sum[a.Length - 1];
这是因为sum
列表将只包含a.Length-2
项(当i==a.Length-1
时,循环停止)。这是你代码中的一个bug!您应该使用i
作为条件:
for (int i = 1; i < a.Length; i++)
现在,如果您愿意,可以简化此代码,方法是删除列表,从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;
}
您的列表
sum
为空,您尝试使用sum[0]
访问缺少的第一个元素。另外,仅仅添加所有元素不需要求和列表,您可以使用sumAll
来完成。但是,如果仍要使用sumAll
,请使用list sum=new list()初始化列表代码>并替换行sum[i]=sum[i-1]+a[i]代码>带sum[i]=sum[i]+sum[i-1]代码>感谢您的详细解释!!这真的帮了大忙!!
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;
}
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;
}
public static int SumAll(int[] a)
{
return a == null ? 0 : a.Sum();
}