A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

private void btnSum _click ()默认参数我省略{double x=0,y=0;
bool flag =true;
while (flag )
{
flag =false ;
try
{x=Convert .ToDouble (txtAdd .Text );
y=Convert .To Double (txtAdd2.Text );
}
catch
{MessageBox .Show ("输入错误”);
flag =True ;
}
}
double douSum =x+y;
txtSum .Text =Convert .ToString(douSum );
}
我故意输入字母报错MessageBox 关不掉,求指教,期望结果为出错关掉Message Box 重新输入来自: Android客户端

IMG20130521200714.jpg (71.16 KB, 下载次数: 0)

IMG20130521200714.jpg

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

12 个回复

倒序浏览
不用要循环的。可以直接在try{}catch{}里的程序块里执行输出最终结果。
  1.             double x = 0, y = 0;
  2.             try
  3.             {
  4.                 x = Convert.ToDouble(txtAdd.Text);
  5.                 y = Convert.ToDouble(txtAdd2.Text);
  6.                 double douSum = x + y;
  7.                 txtSum.Text = Convert.ToString(douSum);
  8.             }
  9.             catch
  10.             {
  11.                 MessageBox.Show("输入错误");
  12.                 txtSum.Text = "输入有误,无法计算";
  13.             }
复制代码

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 chankamlam 于 2013-5-21 20:56 编辑

private void btnSum _click ()默认参数我省略{double x=0,y=0;
bool flag =true;
while (flag )
{
flag =false ;
try
{x=Convert .ToDouble (txtAdd .Text );
y=Convert .To Double (txtAdd2.Text );
}
catch
{MessageBox .Show ("输入错误”);
flag =True ;
Break;// 关不掉在于你把try放在while里,加break就好了。
}
}
double douSum =x+y;
txtSum .Text =Convert .ToString(douSum );
}


评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 郎吉祥 于 2013-5-22 11:36 编辑

楼上你退出循环了。还是会执行后边的2句话。那样double douSum =x+y;不就编译报错了吗。
楼主你的代码flag思路貌似反了。出错的时候,flag一直为true,所以肯定就会循环下去一直报错。要想跳出循环,应该在catch里flag=false;所以根本用不着循环,循环根本是多余的(不管输入是否正确,你都要退出循环)。
最后2句代码。你如果放在try外边,还是会执行。这样报错就没有意义了。报错之后,程序还是执行double douSum =x+y;这样必然会编译出错。
所以代码应该放在try里边。
{double x=0,y=0;

try
{x=Convert .ToDouble (txtAdd .Text );
y=Convert .To Double (txtAdd2.Text );
double douSum =x+y;
txtSum .Text =Convert .ToString(douSum );

}
catch
{MessageBox .Show ("输入错误”);
flag =True ;
//期望出错之后重新输入的话,你要清理text的内容?
txtAdd .Text =null;
txtAdd2.Text =null;
}

}

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

回复 使用道具 举报
简单来说就是基础知识不牢固,和我很像啊(我也有很多知识点不会)……。楼主while循环都没高透呢。try-catch也是一知半解。所以基础知识一定要牢固。
回复 使用道具 举报
郎吉祥 发表于 2013-5-22 11:29
楼上你退出循环了。还是会执行后边的2句话。那样double douSum =x+y;不就编译报错了吗。
楼主你的代码flag ...

double x=0,y=0; // 早就声明
double douSum =x+y;// 不会报错
他的问题是:我故意输入字母报错MessageBox 关不掉,求指教,期望结果为出错关掉Message Box 重新输入
回复 使用道具 举报
chankamlam 发表于 2013-5-22 11:53
double x=0,y=0; // 早就声明
double douSum =x+y;// 不会报错
他的问题是:我故意输入字母报错MessageBo ...

可是他输入的是字母,已经不是double了。
回复 使用道具 举报
加 break

  double x=0,y=0;
            bool flag =true;
            while (flag )
            {
               flag =false ;
                 try
                       {
                       x=Convert .ToDouble (txtAdd .Text );
                       y=Convert .ToDouble (txtAdd2.Text );
                       }
                catch
                  {
                   MessageBox .Show ("输入错误");
   
                     flag = true;
                   break;
                     }
          }
double douSum =x+y;
txtSum .Text =Convert .ToString(douSum );
回复 使用道具 举报
死循环了
回复 使用道具 举报
郎吉祥 发表于 2013-5-22 12:07
可是他输入的是字母,已经不是double了。

x,y 是变量喔
回复 使用道具 举报
本帖最后由 郎吉祥 于 2013-5-22 12:44 编辑
chankamlam 发表于 2013-5-22 12:36
x,y 是变量喔

怎么跟你说呢。try就是验证是否有错误的,当输入字母的时候,x、y被赋值为字母,这时候就是string类型了,有冲突所以报错,但是已经赋值了,所以x/y现在暂时变成了string,当后边。x+Y的时候,肯定是要出错的,
或许我现在说的不对,我先去调试下看看。
回复 使用道具 举报
本帖最后由 郎吉祥 于 2013-5-22 12:48 编辑
chankamlam 发表于 2013-5-22 12:36
x,y 是变量喔

OK.我调试了。看来你是对的。还是double。我犯了一个错误。字母转换是失败的。我把这一点忘了。但是这样把2句代码放在外边还是会输出一个结果。这不科学……
回复 使用道具 举报
郎吉祥 发表于 2013-5-22 12:44
OK.我调试了。看来你是对的。还是double。我犯了一个错误。字母转换是失败的。我把这一点忘了。但是这样把 ...

=]。。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马