如何使代码在 FOR 循环中运行?而不是那么多的IF

Posted

技术标签:

【中文标题】如何使代码在 FOR 循环中运行?而不是那么多的IF【英文标题】:How do I make the code run in a FOR loop? Instead of so many IF 【发布时间】:2019-12-25 07:24:27 【问题描述】:

如何在这段代码中使用FOR 循环? 而是使用大量IF 问题。 我已经尝试了很多方法来使它工作,但没有成功。 我很乐意通过智能循环帮助我解决这个问题。 这适用于计算架子位置和抽屉位置的软件。 我需要你帮我解决这个问题。 我想要这样的东西:

            for (int i = 1; i <= NishCount; i++)
            
                lblNish + i + .Text = nish + i + .ToString();
            

这是代码:

            if (NishCount == 1 && MdfCount == 0)
            
                lblNish1.Text = nish1.ToString();
                lblNish2.Text = "ENTER VALUES";

                lblSho.Text = "ENTER VALUES";

                lblMDF1.Text = "ENTER VALUES";
                lblMDF2.Text = "ENTER VALUES";
            
            if (NishCount == 2 && MdfCount == 0)
            
                lblNish1.Text = nish1.ToString();
                lblNish2.Text = nish2.ToString();

                lblSho.Text = "ENTER VALUES";

                lblMDF1.Text = "ENTER VALUES";
                lblMDF2.Text = "ENTER VALUES";
            
            if (NishCount == 1 && MdfCount == 1)
            
                lblNish1.Text = nish1.ToString();
                lblNish2.Text = "ENTER VALUES";

                lblSho.Text = "ENTER VALUES";

                lblMDF1.Text = MDF1.ToString();
                lblMDF2.Text = "ENTER VALUES";
            
            if (NishCount == 2 && MdfCount == 1)
            
                lblNish1.Text = nish1.ToString();
                lblNish2.Text = nish2.ToString();

                lblSho.Text = "ENTER VALUES";

                lblMDF1.Text = MDF1.ToString();
                lblMDF2.Text = "ENTER VALUES";
            
            if (NishCount == 1 && MdfCount == 2)
            
                lblNish1.Text = nish1.ToString();
                lblNish2.Text = "ENTER VALUES";

                lblSho.Text = "ENTER VALUES";

                lblMDF1.Text = MDF1.ToString();
                lblMDF2.Text = MDF2.ToString();
            
            if (NishCount == 2 && MdfCount == 2)
            
                lblNish1.Text = nish1.ToString();
                lblNish2.Text = nish2.ToString();

                lblSho.Text = "ENTER VALUES";

                lblMDF1.Text = MDF1.ToString();
                lblMDF2.Text = MDF2.ToString();
            
            if (NishCount == 1 && MdfCount == 0 && SNCheckBox.Checked == true)
            
                lblNish1.Text = nish1.ToString();
                lblNish2.Text = "ENTER VALUES";

                lblSho.Text = shocev.ToString();

                lblMDF1.Text = "ENTER VALUES";
                lblMDF2.Text = "ENTER VALUES";
            
            if (NishCount == 2 && MdfCount == 0 && SNCheckBox.Checked == true)
            
                lblNish1.Text = nish1.ToString();
                lblNish2.Text = nish2.ToString();

                lblSho.Text = shocev.ToString();

                lblMDF1.Text = "ENTER VALUES";
                lblMDF2.Text = "ENTER VALUES";
            
            if (NishCount == 1 && MdfCount == 1 && SNCheckBox.Checked == true)
            
                lblNish1.Text = nish1.ToString();
                lblNish2.Text = "ENTER VALUES";

                lblSho.Text = shocev.ToString();

                lblMDF1.Text = MDF1.ToString();
                lblMDF2.Text = "ENTER VALUES";
            
            if (NishCount == 2 && MdfCount == 1 && SNCheckBox.Checked == true)
            
                lblNish1.Text = nish1.ToString();
                lblNish2.Text = nish2.ToString();

                lblSho.Text = shocev.ToString();

                lblMDF1.Text = MDF1.ToString();
                lblMDF2.Text = "ENTER VALUES";
            
            if (NishCount == 1 && MdfCount == 2 && SNCheckBox.Checked == true)
            
                lblNish1.Text = nish1.ToString();
                lblNish2.Text = lblSho.ToString();

                lblSho.Text = "ENTER VALUES";

                lblMDF1.Text = MDF1.ToString();
                lblMDF2.Text = MDF2.ToString();
            
            if (NishCount == 2 && MdfCount == 2 && SNCheckBox.Checked == true)
            
                lblNish1.Text = nish1.ToString();
                lblNish2.Text = nish2.ToString();

                lblSho.Text = shocev.ToString();

                lblMDF1.Text = MDF1.ToString();
                lblMDF2.Text = MDF2.ToString();
            

【问题讨论】:

你需要在这里使用 switch case... For 循环在这里没有用。 怎么办?你能写代码吗? 你能不能把字符串文字改成英文,这样我们就可以更容易地看出哪些是相同的,哪些是不同的? (最好是变量名)你可以edit你的问题。 请阅读docs.microsoft.com/en-us/dotnet/csharp/language-reference/… 了解 C# 中的 switch case。尝试在您的代码中使用它并在此处提问您是否遇到任何问题。 @Sweeper 我把它改成英文了。 【参考方案1】:

你可以从初始化它们开始:

lblNish1.Text = "הזן מידות";
lblNish2.Text = "הזן מידות";

lblSho.Text = "הזן מידות";

lblMDF1.Text = "הזן מידות";
lblMDF2.Text = "הזן מידות";

然后根据需要设置它们:

if (NishCount >= 1) 
    lblNish1.Text = nish1.ToString();

if (NishCount >= 2) 
    lblNish2.Text = nish2.ToString();

if (SNCheckBox.Checked)
    lblSho.Text = shocev.ToString();

if (MdfCount >= 1) 
    lblMDF1.Text = MDF1.ToString();

if (MdfCount >= 2) 
    lblMDF2.Text = MDF2.ToString();

如果我们知道您的所有代码,可能会有更优雅的解决方案。

【讨论】:

@אריפרץ 这很容易阅读,在这种情况下可能就是您所需要的。 @אריפרץ 有很多的方法,如果你争得够狠,其中任何一种都可能是“最好的”。我认为这没问题,除非你想彻底改变你的代码结构。【参考方案2】:

不要使用 for 循环。您的逻辑简化为以下

            lblNish1.Text = nish1.ToString();
            lblNish2.Text = "ENTER VALUES";

            lblSho.Text = "ENTER VALUES";

            lblMDF1.Text = "ENTER VALUES";
            lblMDF2.Text = "ENTER VALUES";

            if (NishCount == 2)
            
                lblNish2.Text = nish2.ToString();
            
            switch(MdfCount)
            
                case 1:
                    lblMDF1.Text = MDF1.ToString();
                    break;
                case 2:
                    lblMDF1.Text = MDF1.ToString();
                    lblMDF2.Text = MDF2.ToString();
                    break;
            
            if(SNCheckBox.Checked && !((NishCount == 1) && (MdfCount == 2)))
            
                lblSho.Text = shocev.ToString();
            

【讨论】:

非常感谢,可以给我发邮件吗?这是我的邮件:ari.perez25.06@gmail.com 如果我有50次,我会写50个案例? 很难说减少代码量的最佳方法。通常最好的方法是为每个条件设置一个不同的位。所以你有 1,2,4,8,16,32,64,128,256(等等),其中每个位都是不同的条件。如果你使用 long,那么你就有 64 位和 64 个条件。您仍然需要 64 个 if 语句,但每个 if 中只需要一行代码。您的代码在每个 if 语句中重复了重复代码。

以上是关于如何使代码在 FOR 循环中运行?而不是那么多的IF的主要内容,如果未能解决你的问题,请参考以下文章

你会如何水平翻转一个直角三角形,使斜边位于左侧,使用for循环?

如何在bash shell中执行for循环生成的curl命令?

for 循环是不是只在 python 类中运行一次?

For 循环未针对浮点值运行

为啥 for 循环不遍历列表中的每个项目?

为啥我应该在循环中使用 foreach 而不是 for (int i=0; i<length; i++) ?