如何使代码在 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循环?