System.IndexOutOfRangeException总和0的总和

时间:2014-04-17 04:48:37

标签: c#

对不起这个简单的问题。但我是初学者。 我试图找到那些总和为0的子集,这些子集的数字在数组中。

我的子集有什么问题。长度。我已经调整了它,我认为逻辑很好。但每次拍摄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]);
                                }

3 个答案:

答案 0 :(得分:2)

这是一个逻辑错误:

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++)

答案 1 :(得分:0)

请注意 for 循环中的条件:始终为i < subset.Length。但您应该与相应的循环变量进行比较: j k l m 。 (Copy'n'paste错误?)

在你的代码中,j / k / l / m的 for 循环是无限的,因为当这些循环迭代时, i 永远不会递增...

答案 2 :(得分:0)

您的for循环终止条件始终为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++)