为什么传递给GregorianCalendar(int year,int month,int day)构造函数的参数会产生“整数数太大”错误?

时间:2019-02-06 12:23:20

标签: java compiler-errors gregorian-calendar

我编写了一个程序以返回任何给定日期的日期。

但是在实例化cale7和cale8对象的行中,产生了“整数号太大”错误。传递给构造函数以实例化cale(1/2/3/4/5/6/9/10/11)的其他日期不是这种情况。

我已经思考这个问题已有一段时间了,但是我无法思考为什么仅在两种情况下而不是其他情况下产生错误的任何原因。任何线索都将有所帮助。

这是我的代码->

class Gc{
public static void main(String[] args){
    out.println("yyyy/mm/dd");
    Scanner inp=new Scanner(in);
    int year=inp.nextInt();
    int mm=inp.nextInt();
    int dd=inp.nextInt();
    out.println(m1(year,mm,dd));
}
public static String m1(int year,int mm,int dd){
    try{
    if((mm>12)||(mm<1)||(dd>31)||(dd<1)||(year<2000)||(year>3000)){
        System.exit(0);
    }
    if(((mm==4)||(mm==6)||(mm==9)||(mm==11))&&(dd==31)){
        System.exit(0);
    }
    if((mm==2)&&(dd>29)){
        System.exit(0);
    }
    if(((year%4)!=0)&&(mm==2)&&(dd==29)){
        System.exit(0);
    }
    if(((year%4)==0)&&((year%400)!=0)&&(dd==29)){
        System.exit(0);
    }
    }
    catch(Exception e){}

GregorianCalendar cale=new GregorianCalendar(2015,01,01);
System.out.println(cale.get(GregorianCalendar.MONTH));
System.out.println(cale.getTime()); 

GregorianCalendar cale1=new GregorianCalendar(2015,02,01);
System.out.println(cale1.get(GregorianCalendar.MONTH));

GregorianCalendar cale2=new GregorianCalendar(2015,03,01);
System.out.println(cale2.get(GregorianCalendar.MONTH));

GregorianCalendar cale3=new GregorianCalendar(2015,04,01);
System.out.println(cale3.get(GregorianCalendar.MONTH));

GregorianCalendar cale4=new GregorianCalendar(2015,05,01);
System.out.println(cale4.get(GregorianCalendar.MONTH));

GregorianCalendar cale5=new GregorianCalendar(2015,06,01);
System.out.println(cale5.get(GregorianCalendar.MONTH));

GregorianCalendar cale6=new GregorianCalendar(2015,07,01);
System.out.println(cale6.get(GregorianCalendar.MONTH));

GregorianCalendar cale7=new GregorianCalendar(2015,08,01);
System.out.println(cale7.get(GregorianCalendar.MONTH));

GregorianCalendar cale8=new GregorianCalendar(2015,09,01);
System.out.println(cale8.get(GregorianCalendar.MONTH));


GregorianCalendar cale9=new GregorianCalendar(2015,10,01);
System.out.println(cale9.get(GregorianCalendar.MONTH));

GregorianCalendar cale10=new GregorianCalendar(2015,11,01);
System.out.println(cale10.get(GregorianCalendar.MONTH));

GregorianCalendar cale11=new GregorianCalendar(2015,12,01);
System.out.println(cale11.get(GregorianCalendar.MONTH));

GregorianCalendar cal=new GregorianCalendar(year,mm,dd);
System.out.println(cal.getTime());
System.out.println(cal.get(GregorianCalendar.MONTH));
switch(cal.get(GregorianCalendar.DAY_OF_WEEK)){
    case 1:
    return "SUNDAY";
    case 2:
    return "MONDAY";
    case 3:
    return "TUESDAY";
    case 4:
    return "WEDNESDAY";
    case 5:
    return "THURSDAY";
    case 6:
    return "FRIDAY";
    case 7:
    return "SATURDAY";
    default:
    return "NONE";
}
}

}

1 个答案:

答案 0 :(得分:3)

在Java中,以0开头的数字是八进制的。因此,“ 010”实际上是数字8。

08不是有效的八进制数字(八进制数字从07到010)。只需写“ 8”而不是“ 08”即可。

作为一个单独的问题,GregorianCalendar是过时的API。不要使用它;请改用java.time包。如果您(仍以某种方式)仍在Java 1.7或更低版​​本上,则可以使用JSR-310反向端口将此程序包添加到Java。如果您使用的是1.8或更高版本,则它是核心Java的一部分。