黑马程序员技术交流社区

标题: IO流问题 [打印本页]

作者: 黑马罗坚    时间: 2012-5-4 23:50
标题: IO流问题
  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
请输入年份
输入有误,请重新输入

作者: hongjiqiao    时间: 2012-5-5 02:15
坐沙发喽。。。。你比我学得那么快,。。。高人
作者: 邓飞飞    时间: 2012-5-5 07:49

复制代码
把input方法修改成以下几种地一次输入英文为什么死循环哦?
复制代码
结果 每次执行到year=sn.nextInt();报异常
复制代码
结果:
请输入年份
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)
复制代码
为什么注释了sn.close();老是重新接受键盘输入  不注释结果
Start
请输入年份
输入有误,请重新输入
Start
请输入年份
输入有误,请重新输入
Start
请输入年份
输入有误,请重新输入
..........
Start
请输入年份
输入有误,请重新输入





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2