当我输入单词“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");
答案 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");
}
}