繁体   English   中英

做循环和while循环

[英]Do loops and while loops

当我输入单词“ Andrea”时,程序崩溃。 我正在猜测,但是我认为这是因为我在循环中,并且它不知道何时停止。 如果我是正确的,你能告诉我如何摆脱困境。 当我休息一下时,它告诉我没有循环结束。

private void button1_Click(object sender, EventArgs e)
        {
             do Commission.Text = (Convert.ToDouble(textBox2.Text) / 10).ToString();
          while  (textBox1.Text == "Andrea");
        break;           
        do Commission.Text = (Convert.ToDouble(textBox2.Text) / 10).ToString();
          while (textBox1.Text == "Brittany"); 
        do Commission.Text = (Convert.ToDouble(textBox2.Text) / 10).ToString();
           while  (textBox1.Text == "Eric");
        break;          
            MessageBox.Show("The spelling of the name is incorrect", "Bad Spelling");

您将textBox1.Text == "Andrea"textBox1.Text == "Brittany"作为循环条件,但是您似乎并未在代码中的任何位置更改该值。 因此,您有一个无限循环,这将导致程序崩溃。

我不确定您的程序打算做什么,但是您可以选择退出循环:

  • break; 语句退出循环。
  • 将循环条件更改为最终可能导致false
  • 在循环主体中的某处更改textBox.Text属性。

另外,您可以使用if语句检查一次条件,并在条件为真时执行一些代码。

编辑:

我已经使用if语句完成了此操作,但现在我希望尝试使用循环执行相同的操作

没有目的只是试图学习编程

针对以上评论,我将告诉您如何用循环替换if语句。 像这样做:

// Check the condition before executing the code.
while (textBox1.Text == "Andrea") {
    // Execute the conditional code.
    Commission.Text = (Convert.ToDouble(textBox2.Text) / 10).ToString();

    // We actually only want to execute this code once like an if statement,
    // not while the condition is true, so break out of the loop.
    break;
}

在原始帖子中,您使用的是do while循环,而不是while循环。 您应该记住, do while执行一次,无论其条件是否为真。 它仅检查条件以查看是否应再运行几次。 另一方面, while循环在执行之前先检查条件,这意味着您可以用if语句代替它。

您应该记住,这是一个不好的做法。 如果要根据特定条件执行代码,请使用if语句。 如果要重复执行一定次数或某些条件为真时执行代码,请使用循环。

我怀疑那是while你真正意思if 否则,当应用程序崩溃时,您会收到错误消息或异常消息吗? 您可以将此函数包装在try / catch中以查看异常是什么吗?

编辑要弄清楚,请尝试使用以下方法主体:

private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                if(textBox1.Text == "Andrea")
                {
                    Commission.Text = (Convert.ToDouble(textBox2.Text) / 10).ToString();
                }
                else if(textBox1.Text == "Brittany")
                {
                    Commission.Text = (Convert.ToDouble(textBox2.Text) / 10).ToString();
                }
                else 
                {    
                    MessageBox.Show("The spelling of the name is incorrect", "Bad Spelling");
                }
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Bad Spelling");
            }
        }
    }
}

乍一看,您似乎陷入了无限循环。 在textBox1中键入“ Andrea”并单击button1后,它将永久更新Commission.Text,而不会中断线程以处理任何其他输入。

更大的问题是,该程序到底应该做什么? 为什么要循环执行呢?

除了FacticiusVir之前所说的那样,您还可以在switch语句中执行此操作(由于我们正在为每个人计算相同的佣金,因此可以将它们合并:

private void button1_Click(object sender, EventArgs e)
{
    switch(textBox1.Text)
    {
        case "Andrea":
        case "Brittany":
            Commission.Text = (Convert.ToDouble(textBox2.Text) / 10).ToString();
            break;
        default:
            MessageBox.Show("The spelling of the name is incorrect", "Bad Spelling");
    }
}

如果您想为每个人做不同的佣金,则需要将其拆分(在下面的布列塔尼语中,现在获得不同的佣金值):

private void button1_Click(object sender, EventArgs e)
{
    switch(textBox1.Text)
    {
        case "Andrea":
            Commission.Text = (Convert.ToDouble(textBox2.Text) / 10).ToString();
            break;
        case "Brittany":
            Commission.Text = (Convert.ToDouble(textBox2.Text) / 15).ToString();
            break;
        default:
            MessageBox.Show("The spelling of the name is incorrect", "Bad Spelling");
    }
}

do { x } while (y)构造运行一次x ,然后只要y为真,就继续连续运行x

您没有获得任何成功,因为您似乎正在像这样构建它:

do
{
    // This will just run over and over...
}
while (condition); // ...because this is always true.

break; // This isn't even in the loop!

换句话说,您试图添加break (基于您在另一个答案上留下的评论)在循环之外,这就是为什么代码无限期运行的原因。

现在,听起来您实际上只是在尝试使用do / while模拟if语句,大概是对自己的挑战。 在这种情况下,请帮自己一个忙,放弃这个想法。

您不能使用do / while循环来模拟if条件,因为do始终至少运行一次。 您可以确保它在特定条件下(即if )准确地运行一次的唯一方法是将if语句嵌入do循环内,这将使练习的目的无效。

也就是说,您可以使用一段while 模拟if

while (condition)
{
    // Execute code once.
    break; // Then just quit.
}

看这一张:

do Commission.Text = (Convert.ToDouble(textBox2.Text) / 10).ToString();
  while  (textBox1.Text == "Andrea");

...如果textBox1.Text == "Andrea"您期望发生什么?

程序正在做的是检查您的比较测试,然后,如果它为true,则执行do / while块内的do / while ,然后检查比较测试,然后为true,则执行do / while内的do / while块,然后检查比较测试,如果是,则do / while块内部的do / while ,然后...

明白这点?

如果条件要在循环内更改(或显式中断),则使用do / while循环。

相反,您想要将其更改为类似

if( textBox1.Text == "Andrea" )
  Commission.Text = (Convert.ToDouble(textBox2.Text) / 10).ToString();

只是一个猜测,但是正如FacticiusVir所说,您可能希望使用条件语句而不是循环语句:

private void button1_Click(object sender, EventArgs e)
{
    if (textBox1.Text == "Andrea" || textBox1.Text == "Brittany")
    {
        Commission.Text = (Convert.ToDouble(textBox2.Text) / 10).ToString();
    }
    else
    {
        MessageBox.Show("The spelling of the name is incorrect", "Bad Spelling");
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM