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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马罗坚 金牌黑马   /  2012-5-4 23:50  /  2231 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. /**
  2. *求任意年的2月多少天
  3. *求昨天的年月日
  4. */
  5. public class CalendarDemo {
  6. static int count;
  7. public static void main(String[] args) {
  8. int year=input();
  9. sop(year+"年2月有"+countDay(year)+"天");
  10. sop(getDay());
  11. }



  12. public static int input(){
  13. sop("请输入年份");
  14. int year=-1;
  15. while(true){
  16. Scanner sn=new Scanner(System.in);
  17. try{
  18. year=sn.nextInt();
  19. sn.close();
  20. break;
  21. }catch(Exception e){
  22. sop("输入有误,请重新输入");
  23. // input();
  24. }
  25. }
  26. return year;
  27. }



  28. public static String getDay(){
  29. // String[] week={"","星期天","星期一","星期二",
  30. // "星期三","星期四","星期五","星期六"};
  31. // Calendar cd=Calendar.getInstance();
  32. //
  33. // return new StringBuilder().append(cd.get(Calendar.YEAR)+"年")
  34. // .append(cd.get(Calendar.MONTH)+1+"月")
  35. // .append(cd.get(Calendar.DAY_OF_MONTH)+"日")
  36. // .append(week[cd.get(Calendar.DAY_OF_WEEK)])
  37. // .append(cd.get(Calendar.HOUR_OF_DAY)+"点")
  38. // .append(cd.get(Calendar.MINUTE)+"分")
  39. // .append(cd.get(Calendar.SECOND)+"秒")
  40. // .toString();

  41. Calendar cd=Calendar.getInstance();
  42. cd.add(Calendar.DAY_OF_MONTH, -1);
  43. Date dt=cd.getTime();
  44. DateFormat df=new SimpleDateFormat("yyyy年MM月dd日 E HH:mm:ss");
  45. return df.format(dt);
  46. }
复制代码
把input方法修改成以下几种地一次输入英文为什么死循环哦?
  1. public static int input(){
  2. sop("请输入年份");
  3. int year=-1;
  4. Scanner sn=new Scanner(System.in);
  5. while(true){
  6. try{
  7. /*都输入整数时 下面2条语句没问题证明Scanner对象可以多次接收
  8. * 控制台输入 为什么把Scanner对象声明放在循环外面地一次输英文后面输数字就死循环了?
  9. */
  10. year=sn.nextInt();
  11. year=sn.nextInt();
  12. // sn.close();
  13. break;
  14. }catch(Exception e){
  15. sop("输入有误,请重新输入");
  16. // input();
  17. }
  18. }
  19. return year;
  20. }
复制代码
结果 每次执行到year=sn.nextInt();报异常
  1. public static int input(){
  2. int year=-1;
  3. count++;
  4. while(true){
  5. try{
  6. Scanner sn=new Scanner(System.in);
  7. sop("请输入年份");
  8. year=sn.nextInt();
  9. sn.close(); //为什么不把这条语句注释会无限递归哦
  10. break;
  11. }catch(Exception e){
  12. sop("输入有误,请重新输入");
  13. input();
  14. }
  15. }
  16. sop(count);
  17. return year;
  18. }
复制代码
结果:
请输入年份
sdf
输入有误,请重新输入
请输入年份
2
2
请输入年份
输入有误,请重新输入
请输入年份
输入有误,请重新输入
请输入年份
输入有误,请重新输入
请输入年份
输入有误,请重新输入
Exception in thread "main" java.lang.StackOverflowError
at java.util.regex.Pattern.group0(Unknown Source)
at java.util.regex.Pattern.sequence(Unknown Source)
at java.util.regex.Pattern.expr(Unknown Source)
  1. public static int input(){
  2. int year=-1;
  3. count++;
  4. Scanner sn=new Scanner(System.in);
  5. while(true){
  6. try{
  7. sop("请输入年份");
  8. year=sn.nextInt();
  9. sn.close();
  10. break;
  11. }catch(Exception e){
  12. sop("输入有误,请重新输入");
  13. input();
  14. }
  15. }
  16. sop(count);
  17. return year;
  18. }
复制代码
为什么注释了sn.close();老是重新接受键盘输入  不注释结果
Start
请输入年份
输入有误,请重新输入
Start
请输入年份
输入有误,请重新输入
Start
请输入年份
输入有误,请重新输入
..........
Start
请输入年份
输入有误,请重新输入

评分

参与人数 1技术分 +2 收起 理由
贠(yun)靖 + 2 很给力!

查看全部评分

2 个回复

正序浏览
  • /**
  • *求任意年的2月多少天
  • *求昨天的年月日
  • */
  • public class CalendarDemo {
  • static int count;
  • public static void main(String[] args) {
  • int year=input();
  • sop(year+"年2月有"+countDay(year)+"天");
  • sop(getDay());
  • }
  • public static int input(){
  • sop("请输入年份");
  • int year=-1;
  • while(true){
  • Scanner sn=new Scanner(System.in);
  • try{
  • year=sn.nextInt();
  • sn.close();
  • break;
  • }catch(Exception e){
  • sop("输入有误,请重新输入");
  • // input();
  • }
  • }
  • return year;
  • }
  • public static String getDay(){
  • // String[] week={"","星期天","星期一","星期二",
  • // "星期三","星期四","星期五","星期六"};
  • // Calendar cd=Calendar.getInstance();
  • //
  • // return new StringBuilder().append(cd.get(Calendar.YEAR)+"年")
  • // .append(cd.get(Calendar.MONTH)+1+"月")
  • // .append(cd.get(Calendar.DAY_OF_MONTH)+"日")
  • // .append(week[cd.get(Calendar.DAY_OF_WEEK)])
  • // .append(cd.get(Calendar.HOUR_OF_DAY)+"点")
  • // .append(cd.get(Calendar.MINUTE)+"分")
  • // .append(cd.get(Calendar.SECOND)+"秒")
  • // .toString();
  • Calendar cd=Calendar.getInstance();
  • cd.add(Calendar.DAY_OF_MONTH, -1);
  • Date dt=cd.getTime();
  • DateFormat df=new SimpleDateFormat("yyyy年MM月dd日 E HH:mm:ss");
  • return df.format(dt);
  • }


复制代码
把input方法修改成以下几种地一次输入英文为什么死循环哦?
  • public static int input(){
  • sop("请输入年份");
  • int year=-1;
  • Scanner sn=new Scanner(System.in);
  • while(true){
  • try{
  • /*都输入整数时 下面2条语句没问题证明Scanner对象可以多次接收
  • * 控制台输入 为什么把Scanner对象声明放在循环外面地一次输英文后面输数字就死循环了?
  • */
  • year=sn.nextInt();//nextInt 读的是基本类型的数据,一次读一个int类型的整数。更深入的我就不知道了....................
  • year=sn.nextInt();
  • // sn.close();
  • break;
  • }catch(Exception e){
  • sop("输入有误,请重新输入");
  • // input();
  • }
  • }
  • return year;
  • }


复制代码
结果 每次执行到year=sn.nextInt();报异常
  • public static int input(){
  • int year=-1;
  • count++;
  • while(true){
  • try{
  • Scanner sn=new Scanner(System.in);
  • sop("请输入年份");
  • year=sn.nextInt();
  • sn.close(); //为什么不把这条语句注释会无限递归哦
  • break;
  • }catch(Exception e){
  • sop("输入有误,请重新输入");
  • input(); //你在异常处理中又调用了有异常的方法,这样的话就成为了一个没结束标志的递归,你定义的year是int型的,你输入不是int时,程序就发生异常,就会去执行处理异常的代码块,你在异常处理代码块中有调用了有异常的方法,这样会一直循环下去,一直在处理异常。
  • }
  • }
  • sop(count);
  • return year;
  • }

复制代码
结果:
请输入年份
sdf
输入有误,请重新输入
请输入年份
2
2
请输入年份
输入有误,请重新输入
请输入年份
输入有误,请重新输入
请输入年份
输入有误,请重新输入
请输入年份
输入有误,请重新输入
Exception in thread "main" java.lang.StackOverflowError
at java.util.regex.Pattern.group0(Unknown Source)
at java.util.regex.Pattern.sequence(Unknown Source)
at java.util.regex.Pattern.expr(Unknown Source)
  • public static int input(){
  • int year=-1;
  • count++;
  • Scanner sn=new Scanner(System.in);
  • while(true){
  • try{
  • sop("请输入年份");
  • year=sn.nextInt();
  • sn.close();
  • break;
  • }catch(Exception e){
  • sop("输入有误,请重新输入");
  • input();//没有结束标志的递归,就是死循环。
  • }
  • }
  • sop(count);
  • return year;
  • }

复制代码
为什么注释了sn.close();老是重新接受键盘输入  不注释结果
Start
请输入年份
输入有误,请重新输入
Start
请输入年份
输入有误,请重新输入
Start
请输入年份
输入有误,请重新输入
..........
Start
请输入年份
输入有误,请重新输入
回复 使用道具 举报
坐沙发喽。。。。你比我学得那么快,。。。高人
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马