[英]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.