Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 与嵌套for循环斗争_C#_Loops_For Loop - Fatal编程技术网

C# 与嵌套for循环斗争

C# 与嵌套for循环斗争,c#,loops,for-loop,C#,Loops,For Loop,给定一个主数字和一个子集数字,希望找到所有可能的子集数字组合,这些数字加起来就是主数字。e、 g: 输入 主:10 子集:2,3,5,7 输出 结果:3+7=10,2+3+5=10 **注意:5+5=10不是有效的结果** 以下是我目前的情况: // Main traversal for (int a = 0; a < nums.Length; a++) { sum = a; for (int b = a + 1; b < nums.Length; b++)

给定一个主数字和一个子集数字,希望找到所有可能的子集数字组合,这些数字加起来就是主数字。e、 g:

输入 主:10
子集:2,3,5,7

输出 结果:3+7=10,2+3+5=10
**注意:5+5=10不是有效的结果**

以下是我目前的情况:

// Main traversal
for (int a = 0; a < nums.Length; a++)
{
    sum = a;

    for (int b = a + 1; b < nums.Length; b++)
    {
      // Thinking this should be the loop that determines 
      // how many numbers are added together. 
      // e.g. Sum of 2 numbers, sum of 3 numbers, etc
        for (int c = a + 1; c < nums.Length; c++)
        {
            sum += nums[b + c];
        }
        if (sum == mainNumber)
            result += "Match found!\n";
    }
}
//主遍历
对于(int a=0;a

我主要是在努力理解“for循环”。我试图找到一个“for循环”可视化工具,但没有成功。或者,递归会使这个问题更容易解决吗?

将for循环看作是圆。嵌套循环类似于圆中的圆

谢天谢地,你的情况并不像这次那么复杂。在这张图片中,一个大的圆圈是一个for循环,它只有一次是真的。在for循环中,其他循环多次为真。每个不同大小的圆都是一个不同的环

我用更具描述性的名称重写了你的代码,唯一的目的是解释循环——我把所有“有用”的东西都拿出来,放进
console.writeline
语句

 // I'm using 5 as an example check here.
for (int outerLoopCounter = 0; outerLoopCounter < 5; outerLoopCounter++)
{
    Console.WriteLine("OUTER:             {0}", outerLoopCounter);

    for (int middleLoopCounter = 0; middleLoopCounter < 5; middleLoopCounter++)
    {
        Console.WriteLine("MIDDLE:              {0}", middleLoopCounter);

        for (int innerLoopCounter = 0; innerLoopCounter < 5; innerLoopCounter++)
        {
            Console.WriteLine("INNER:                 {0}", innerLoopCounter);
        }
    }
}
如果你看缩进,你可以看到一个图案。最靠近文本(左侧)的数字从外部循环输出。中间的数字来自中间的循环,最右边的数字来自最里面的循环


如您所见,外部循环正在缓慢旋转,计数为四(
0
1
2
3
4
),直到它不再小于五,此时它退出循环。中间的圆圈(循环)计数稍微快一点。每当外部循环增加1时,它会再次变为4(同样是0-4)。内圈旋转得相当快——它数到四,每次中圈增加时都会退出。

将for循环视为圆。嵌套循环类似于圆中的圆

谢天谢地,你的情况并不像这次那么复杂。在这张图片中,一个大的圆圈是一个for循环,它只有一次是真的。在for循环中,其他循环多次为真。每个不同大小的圆都是一个不同的环

我用更具描述性的名称重写了你的代码,唯一的目的是解释循环——我把所有“有用”的东西都拿出来,放进
console.writeline
语句

 // I'm using 5 as an example check here.
for (int outerLoopCounter = 0; outerLoopCounter < 5; outerLoopCounter++)
{
    Console.WriteLine("OUTER:             {0}", outerLoopCounter);

    for (int middleLoopCounter = 0; middleLoopCounter < 5; middleLoopCounter++)
    {
        Console.WriteLine("MIDDLE:              {0}", middleLoopCounter);

        for (int innerLoopCounter = 0; innerLoopCounter < 5; innerLoopCounter++)
        {
            Console.WriteLine("INNER:                 {0}", innerLoopCounter);
        }
    }
}
如果你看缩进,你可以看到一个图案。最靠近文本(左侧)的数字从外部循环输出。中间的数字来自中间的循环,最右边的数字来自最里面的循环


如您所见,外部循环正在缓慢旋转,计数为四(
0
1
2
3
4
),直到它不再小于五,此时它退出循环。中间的圆圈(循环)计数稍微快一点。每当外部循环增加1时,它会再次变为4(同样是0-4)。而内圈的旋转速度相当快——它数到四,每次中圈增加时都会退出。

递归几乎从来没有让问题变得更容易理解:)对于可视化工具,请将打印语句放在每个for循环的正下方,并打印
a
b
的值,和
c
在每个位置。这将帮助您
跟踪
您的代码实际在做什么,并可能帮助您更好地可视化它。或者只是附加调试器。。。。更现实地说,你正在尝试做一个组合生成器;我会考虑创建它并评估结果(我认为在.NET中内置了一个)。调试器的问题是,它没有留下一个关于刚刚发生的事情的良好历史记录,这使得学习变得更加困难。它们对于现在的状态很好,但对于过去的状态没有那么好。@MichaelDorgan您应该在最新的可视化研究中尝试历史调试。执行几乎从未使问题更容易理解:)对于可视化工具,将打印语句放在每个for循环的正下方,并打印
a
b
,的值,和
c
在每个位置。这将帮助您
跟踪
您的代码实际在做什么,并可能帮助您更好地可视化它。或者只是附加调试器。。。。更现实地说,你正在尝试做一个组合生成器;我会考虑创建它并评估结果(我认为在.NET中内置了一个)。调试器的问题是,它没有留下一个关于刚刚发生的事情的良好历史记录,这使得学习变得更加困难。它们对于现在的状态很好,但对于过去的状态没有那么好。@MichaeldOrgang您应该在最新的Visual Studio中尝试历史调试