日期:2014-05-20  浏览次数:20899 次

看看这个日历程序,没参数就报 数组越界异常。
我是初学者。这个显示日历的程序花了很久才写好.基本没什么问题。 
唯一的问题就是,本来应该是: 命令行参数不输入就默认显示当前日历,如果输入了月份,年份就显示相应年月的日历。 
但是现在 命令行参数有输入就正常显示,命令行参数不输入就报异常(没空的朋友直接看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();
}
}
}

------解决方案--------------------
象你这样命令行不输入好象不行.要有异常.我帮你改了下,你看可以吗?

Java code
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();
        }
    }
}

------解决方案--------------------
args 是jvm传入你的java程序的一个字符串数组,他的声明是这样的:
String [] args=new String[0];
因此,不论你有没有传参数,args 永远不等与null

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(); 



所以你main方法中的if判断写错了,正确的应该这样写:
if(args.length!=0){
//....
}else{
//...
}