做循环和while循环

时间:2010-09-08 23:59:50

标签: c# 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");

7 个答案:

答案 0 :(得分:6)

您有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语句。如果要重复执行代码一定次数或某些条件为真,则使用循环。

答案 1 :(得分:4)

我怀疑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");
            }
        }
    }
}

答案 2 :(得分:4)

乍一看,看起来你有一个无限循环。只要在textBox1中键入“Andrea”并单击button1,它就会永久更新Commission.Text,而不是中断线程来处理任何其他输入。

更大的问题是,这个程序应该做什么?为什么它在循环中这样做?

答案 3 :(得分:1)

除了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");
    }
}

答案 4 :(得分:1)

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

你没有取得任何成功,因为你似乎正在构建它:

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做什么)的唯一方法循环,这将破坏练习的目的。

那就是说,你可以模仿if while

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

答案 5 :(得分:0)

看着这一件:

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

...如果textBox1.Text == "Andrea"会发生什么?

程序正在做的是检查你的比较测试,然后如果它是真的,它做了do / while块里面的内容,然后它检查比较测试,然后如果它是真的,它做了里面的内容do / while块,然后它检查比较测试,如果它是真的,它会执行do / while块内的内容,然后......

明白这一点?

如果条件在循环内部发生变化(或者你明确地忽略它),你可以使用do / while循环。

您想要的是将其更改为

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

答案 6 :(得分:0)

只是一个猜测,但正如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");
    }
}