我是初学者。这个显示日历的程序花了很久才写好.基本没什么问题。 
唯一的问题就是,本来应该是: 命令行参数不输入就默认显示当前日历,如果输入了月份,年份就显示相应年月的日历。 
但是现在 命令行参数有输入就正常显示,命令行参数不输入就报异常(没空的朋友直接看main方法部分吧,前面日历显示应该没问题的): 
_____________________________________________________________________________________________________
import java.util.Calendar;class CalendarList {
Integer year, month; int dayNum, i, num, count = 0; Calendar objCalendar; int[] arrDayNum = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; CalendarList() {
objCalendar = Calendar.getInstance();
this.year = objCalendar.get(Calendar.YEAR);
this.month = objCalendar.get(Calendar.MONTH);
objCalendar.set(Calendar.DATE, 1);
} CalendarList(String args0, String args1) {
this.month = Integer.parseInt(args0) - 1;
this.year = Integer.parseInt(args1);
objCalendar = Calendar.getInstance();
objCalendar.set(Calendar.YEAR, year);
objCalendar.set(Calendar.MONTH, month);
objCalendar.set(Calendar.DATE, 1);
} void display() {
System.out.println("\t\t\t" + year + "年" + (month + 1) + "月");
System.out.println("日\t一\t二\t三\t四\t五\t六");
num = objCalendar.get(Calendar.DAY_OF_WEEK);
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
arrDayNum[1] += 1;
}
for (i = 0; i < 12; i++) {
if (i == month) {
dayNum = arrDayNum[i];
break;
}
}
for (i = 1; i < num; i++) {
System.out.print(" \t");
count++;
}
for (i = 1; i <= dayNum; i++) {
System.out.print(i + "\t");
count++;
if (count == 7) {
System.out.println();
count = 0;
}
}
System.out.println();
}
}public class MainClass { public static void main(String[] args) {
if (args == null) {
CalendarList objCalendar = new CalendarList();
objCalendar.display();
} else {
CalendarList objCalendar = new CalendarList(args[0], args[1]);//命令行输入参数就正常,不输入就说这里数组异常.
objCalendar.display();
}
}
}

解决方案 »

  1.   

    象你这样命令行不输入好象不行.要有异常.我帮你改了下,你看可以吗?public class MainClass { public static void main(String[] args) {
    System.out.println("请输入(要当前日历输入0空格0):");
    Scanner in=new Scanner(System.in);
    int str1=in.nextInt();
    int str2=in.nextInt();
    if (str1==0&&str2==0) {
    CalendarList objCalendar = new CalendarList();
    objCalendar.display();
    } else {
    CalendarList objCalendar = new CalendarList(new Integer(str1).toString(),new Integer(str2).toString());
    objCalendar.display();
    }
    }
    }
      

  2.   

    args 是jvm传入你的java程序的一个字符串数组,他的声明是这样的:
    String [] args=new String[0];
    因此,不论你有没有传参数,args 永远不等与nullpublic   static   void   main(String[]   args)   { 
      if   (args   ==   null)   { 
      CalendarList   objCalendar   =   new   CalendarList(); 
      objCalendar.display(); 
      }   else   { 
        CalendarList   objCalendar   =   new   CalendarList(args[0],   args[1]);
        objCalendar.display(); 
      } 
    } 所以你main方法中的if判断写错了,正确的应该这样写:
    if(args.length!=0){
    //....
    }else{
    //...
    }