总和为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]);
                                }

总和为0的System.IndexOutOfRangeException总和

这是一个逻辑错误:

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。但是,您应该与相应的循环变量进行比较:jklm。(复制粘贴错误?)

在您的代码中,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++)