总和为0的System.IndexOutOfRangeException总和
本文关键字:System IndexOutOfRangeException 总和 | 更新日期: 2023-09-27 17:58:53
我对这个简单的问题感到抱歉。但我是初学者。我试图找到那些和为0的子集,这些数字在一个数组中。
我的子集出了什么问题。长度。我已经调试过了,我认为逻辑很好。但每次a服用System.IndexOutOfRangeException
。我试过subset.Length-1
。结果没有改变。
该异常在if (subset[m] == 0)
语句的行中给出。
谢谢。
int[] subset={-3,-2,1,1,8} // the sum of -2, 1 and 1 is 0
for (int i = 0; i < subset.Length; i++)
{
for (int j = 0; i < subset.Length; j++)
{
for (int k = 0; i < subset.Length; k++)
{
for (int l = 0; i < subset.Length; l++)
{
for (int m = 0; i < subset.Length; m++)
{
if (subset[m] == 0)
{
Console.WriteLine("The subset of sum of zero:{0}", subset[m]);
}
if (subset[l] + subset[m] == 0)
{
Console.WriteLine("The subset of sum of zero:{0},{1}", subset[m], subset[l]);
}
if (subset[l] + subset[m] + subset[k] == 0)
{
Console.WriteLine("The subset of sum of zero:{0},{1},{2}", subset[m], subset[l], subset[k]);
}
if (subset[l] + subset[m] + subset[k] + subset[j] == 0)
{
Console.WriteLine("The subset of sum of zero:{0},{1},{2}", subset[m], subset[l], subset[k], subset[j]);
}
if (subset[l] + subset[m] + subset[k] + subset[j] + subset[i] == 0)
{
Console.WriteLine("The subset of sum of zero:{0},{1},{2},{3}", subset[m], subset[l], subset[k], subset[j], subset[i]);
}
这是一个逻辑错误:
for (int i = 0; i < subset.Length; i++)
{
for (int j = 0; i < subset.Length; j++)
{
for (int k = 0; i < subset.Length; k++)
{
for (int l = 0; i < subset.Length; l++)
{
for (int m = 0; i < subset.Length; m++)
应该是:
for (int i = 0; i < subset.Length; i++)
{
for (int j = 0; j < subset.Length; j++)
{
for (int k = 0; k < subset.Length; k++)
{
for (int l = 0; l < subset.Length; l++)
{
for (int m = 0; m < subset.Length; m++)
注意中循环的条件:它总是i < subset.Length
。但是,您应该与相应的循环变量进行比较:j、k,l或m。(复制粘贴错误?)
在您的代码中,j/k/l/m的for循环是无限的,因为当这些循环迭代时,i永远不会递增。。。
循环终止条件始终为i < subset.Length
,将其更改为相关迭代变量,即for (int m = 0; m < subset.Length; m++)
for (int j = 0; j < subset.Length; j++)
{
for (int k = 0; k < subset.Length; k++)
{
for (int l = 0; l < subset.Length; l++)
{
for (int m = 0; m < subset.Length; m++)