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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张甲甲 中级黑马   /  2013-5-17 11:59  /  2511 人查看  /  14 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张甲甲 于 2013-5-24 13:29 编辑

以下是我写的代码 为什么成了一个死循环 求解答
public class time
{public static void main(String[] args) {
int year = 0;
Scanner reader=new Scanner(System.in);
do{  
try{  System.out .print("输入年:");  
year=reader.nextInt();  
break;  }
catch(InputMismatchException n){  
System.out.println("必须输入数字");  }  
}while(true);
}
}
运行结果截图

ab.png (1.83 KB, 下载次数: 0)

ab.png

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1

查看全部评分

14 个回复

倒序浏览
楼主你好,因为while(true)后面多了个";"号
黑马云青年为您解答
回复 使用道具 举报
本帖最后由 王盟盟 于 2013-5-17 12:50 编辑

  1. <P>//5楼正解啊
  2. import java.util.InputMismatchException;
  3. import java.util.Scanner;</P>
  4. <P>public class time {
  5. public static void main(String[] args) {
  6.   int year = 0;
  7.   Scanner reader;   
  8.   do{
  9.    
  10.    try{
  11.     System.out.println("输入年:");
  12.     reader=new Scanner(System.in);    //放在这里OK了
  13.     year=reader.nextInt();
  14.     }catch (InputMismatchException e) {      
  15.      System.out.println("必须输入数字");
  16.     }
  17.   }while(true);
  18. }
  19. }</P>
复制代码

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
袁梦希 发表于 2013-5-17 12:18
楼主你好,因为while(true)后面多了个";"号
黑马云青年为您解答

不是的啊,那个分号是语法上要带的
回复 使用道具 举报
王盟盟 发表于 2013-5-17 12:33
不是的啊,那个分号是语法上要带的

好的  我打开eclipse调试一下。
回复 使用道具 举报
do-while循环先执行一次循环体 输入非数字捕捉到异常 进入catch块 所以 break没有执行 循环继续。while的条件为真 进入循环体此时scanner因为之前扫描到了错误的非数字而不能继续 所以nextInt方法还是在扫描之前输入的非数字 所以死循环了。只需在catch里将reader = new Scanner(System.in);就可以了

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
本帖最后由 袁梦希 于 2013-5-17 12:53 编辑

楼主你好,刚才我目测问题回答错了,我来解释一下,你定义的这个year,定义的year变量是个空的,没有用到
并且你用的是do...while循环,循环的特点是先运行一下do中的语句再进行循环
  1. public class RunDemo {

  2. public static void main(String[] args) {
  3. int year = 0;
  4. Scanner reader = new Scanner(System.in);
  5. do {
  6. try {
  7. System.out.print("输入年:");
  8. year = reader.nextInt();
  9. break;
  10. } catch (InputMismatchException n) {
  11. System.out.println("必须输入数字");
  12. }
  13. } while (false);//我不知道你是为了实现什么效果,我只知道这里的ture,改成false就会停止循环了。
  14. }
  15. }
复制代码
也可以这样实现
  1. public class RunDemo {

  2. public static void main(String[] args) {
  3. int year = 0;
  4. Scanner reader = null;
  5. do {
  6. try {
  7. reader = new Scanner(System.in);
  8. System.out.print("输入年:");
  9. year = reader.nextInt();
  10. break;
  11. } catch (InputMismatchException n) {
  12. System.out.println("必须输入数字");
  13. }
  14. } while (true);
  15. }
  16. }
复制代码
黑马云青年为您解答

评分

参与人数 1技术分 +1 黑马币 +3 收起 理由
曹睿翔 + 1 + 3 赞一个!

查看全部评分

回复 使用道具 举报
其实while(true)就是一个死循环!
回复 使用道具 举报
袁梦希 发表于 2013-5-17 12:51
楼主你好,刚才我目测问题回答错了,我来解释一下,你定义的这个year,定义的year变量是个空的,没有用到
...

谢了 可惜我不能给你加分。。。
回复 使用道具 举报
张甲甲 发表于 2013-5-17 16:47
谢了 可惜我不能给你加分。。。

谢谢你了   甲甲  :hug:
回复 使用道具 举报
如果问题已解决请再次编辑,改为以解决,方便大家看帖,没有就继续追问
回复 使用道具 举报
你while的判断条件是true啊 ,当你输入的不是int型,就会走catch,并输出System.out.println("必须输入数字"); 你的break根本没起作用,应该在catch块中加break

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
楼主你好,如果问题以解决,请修改分类,谢谢合作。

回复 使用道具 举报
路过,这个暂时没咋看懂!
回复 使用道具 举报
你输入的不是int类型的数字,运行进入到了catch块里而没有执行break语句,而且while(true),所以就出现了死循环了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马