【问题标题】:How to divide three into three in C# for loop Logic如何在C# for loop Logic中将三分为三
【发布时间】:2020-09-25 09:26:18
【问题描述】:

如何将三分为三,剩余数也需要绑定。请在下面找到我添加了一些逻辑,但它失败了,这不是预期的值。请通过for循环。我在哪里做错了。请纠正我。

预期输出:

总数:8

int m = 0;    
for (int i = 1; i <=8; i++)
{    
    if (i % 3 == 0)
    {
        Console.WriteLine("Carousel Item");
        for (int j = m; j < i; j++)
        {
            Console.WriteLine("Carousel Card : " + j);
            m++;
        }
    }
}

预期输出:

Carousel Item
Carousel Card : 0
Carousel Card : 1
Carousel Card : 2
Carousel Item
Carousel Card : 3
Carousel Card : 4
Carousel Card : 5
Carousel Item
Carousel Card : 6
Carousel Card : 7

但我的输出:

Carousel Item
Carousel Card : 0
Carousel Card : 1
Carousel Card : 2
Carousel Item
Carousel Card : 3
Carousel Card : 4
Carousel Card : 5

【问题讨论】:

  • 使用调试器自行完成。如果您还没有熟悉它,现在是熟悉它的好时机。
  • 我建议您退后一步,学习如何在运行时调试代码。以下是众多可用资源中的一些:Navigate through code with the Visual Studio debuggerLearn to debug C# code using Visual StudioDebugging C# Code in Visual Studio | Mosh
  • 你的外循环从 1 开始。所以它会在 3 和 6 处被 3 整除。为什么你认为它可以被 3 整除 3 次?
  • 我知道你想要三个循环。我在问你为什么期望外循环运行三遍。它永远不会。 1 到 8 之间只有 2 个数可以被 3 整除。
  • 回到 BrootsWaymb 和 @Igor 所说的内容。使用调试器,不要依赖别人为你做你的工作。如果你不能正确使用调试器,你永远不会成为程序员。

标签: c# asp.net asp.net-mvc


【解决方案1】:

您思考问题的方式对您编写解决方案的方式有很大影响。有多种方法可以考虑这个问题,每种方法都会导致不同的解决方案......以及不同的问题。当您提出的解决方案不起作用时,有时以不同的方式重新开始思考问题是有意义的。

您目前的解决方案基本上是:

  • 逐项浏览列表
  • 每第三个项目之后:
    • 打印组标题
    • 打印项目

正如您所发现的,问题在于您从不打印第三组项目,因为其中只有 2 个项目。 '每第三个项目之后'就是原因。如果您的列表不是集合大小的整数倍,那么您永远不会显示最终集合。

您可以改变您的思维方式,也可以在其中添加一个附加条件。除了“每第三个项目之后”,您还可以添加一个检查以查看您是否已到达列表的末尾。这样就可以在最后一项上输出部分集。

以下是解决问题的其他几种方法:

  • 打印标题。显示 3 个项目。重复,直到你的项目用完。
  • 按 3 计数,显示范围内的可用项目
  • 从一个数组(或 Enumerable)中工作,将其分成适当大小的组并处理这些组。

每一个都有你必须解决的问题。

还有很多其他的方式来思考这个问题,每种方式都有自己的解决方案。


只是为了它,我为第三种方法拼凑了一个愚蠢的通用 LINQ 解决方案。这是一个建议,只是当您尝试从不同的角度看待问题时可以提出的一种示例。

void PrintCarousel<T>(IEnumerable<T> source, Action<T> printer)
{
    var groups = source.Select((item, index) => (item, index)).GroupBy(r => r.index / 3, r => r.item);
    foreach (var group in groups)
    {
        Console.WriteLine("Carousel Item");
        foreach (var item in group)
            printer(item);
    }
}

并用它来打印你的 8 个数字:

PrintCarousel(Enumerable.Range(0, 8), i => Console.WriteLine($"Carousel Card : {i}"));

这是一个愚蠢的解决这个问题的方法有几个原因。它对你正在做的事情来说是不必要的复杂,它在内存和代码方面很昂贵,它是通用的,不需要……而且它有点丑陋。

虽然有效。

【讨论】:

    【解决方案2】:

    看起来您正在尝试解决类似的问题,请在以下答案中掠夺我的示例

    https://stackoverflow.com/a/64040594/11830900

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-17
      • 2023-03-19
      • 1970-01-01
      • 2016-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-20
      相关资源
      最近更新 更多