- /**
- *求任意年的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();
- 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();
- }
- }
- 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
请输入年份
输入有误,请重新输入
|