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

问题描述 投票:-1回答:1

这个问题在这里已有答案:

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

但是在用于实例化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";
}
}

}

java compiler-errors gregorian-calendar
1个回答
3
投票

在java中,以0开头的数字是八进制的。所以,'010'实际上是8号。

08不是有效的八进制数(八进制数从07到010)。只需写'8'而不是'08'。

作为一个单独的问题,GregorianCalendar是过时的API。不要用它;请改用java.time包。如果你(不知何故)还在java 1.7或更低版​​本上,那么JSR-310 backport将这个包添加到你的java中。如果你是1.8或者它是核心java的一部分。

© www.soinside.com 2019 - 2024. All rights reserved.