我的程序编译正确,但是当我尝试运行它时,我收到相同的消息:
线程中的异常" main"我的日历程序出现
java.lang.ArrayIndexOutOfBoundsException: 1
错误
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package displaycalendars;
import java.util.Calendar;
import java.util.GregorianCalendar;
public class DisplayCalendars {
public static void main(String[] args){
Calendar calendar = new GregorianCalendar
(Integer.valueOf(args[1]),
Integer.valueOf(args[0])-1,1);
printHeader(calendar);
printData(calendar);
}
public static void printHeader(Calendar calendar){
int month = calendar.get(Calendar.MONTH)+1;
String monthName = "";
switch(month){
case 1: monthName="January";
break;
case 2: monthName="February";
break;
case 3: monthName="March";
break;
case 4: monthName="April";
break;
case 5: monthName="May";
break;
case 6: monthName="June";
break;
case 7: monthName="July";
break;
case 8: monthName="August";
break;
case 9: monthName="September";
break;
case 10: monthName="October";
break;
case 11: monthName="November";
break;
case 12: monthName="December";
break;
}
System.out.println(" "+monthName+ ", " +calendar.get(Calendar.YEAR));
System.out.println("--------------------");
System.out.println("Sun Mon Tue Wed Thu Fri Sat");
}
public static void printData(Calendar calendar){
int dayinWeek=calendar.get(Calendar.DAY_OF_WEEK);
for (int i = 1; i< (dayinWeek); i++)
{
System.out.print(" ");
}
for (int i = 1; i <
(Calendar.DATE); i++){
System.out.print("\n");
calendar.add(Calendar.DATE,1);
}
System.out.printf("%4d",calendar.get(Calendar.DATE));
}
}
答案 0 :(得分:0)
检查错误消息中提供的堆栈跟踪。它指向你写的行
Calendar calendar = new GregorianCalendar
(Integer.valueOf(args[1]),
Integer.valueOf(args[0]) - 1, 1);
每当您尝试在其边界之外的索引处访问数组时,都会抛出ArrayIndexOutOfBoundsException
。这意味着如果一个数组包含6
个元素,你可以访问7
个元素。或者,如果您尝试访问元素编号-1
(当然不存在)。来自documentation:
抛出表示已使用非法索引访问数组。该索引要么负,要么大于或等于到数组的大小。
如果您正在访问
args[1]
// and
args[0]
并且您得到一个例外,因为args
不包含索引0
或索引1
的元素。它可能是空的。您可以使用args.length
之类的
System.out.println("The size is: " + args.length);
args
方法的main
参数由 JVM 自动创建,并且机器传递您在创建应用程序时提供的参数,所谓的命令行参数。
这通常位于控制台中,您可以使用某种
启动应用java DisplayCalendars
命令。然后你可以传递像
这样的参数java DisplayCalendars firstArgument secondArgument
之后,JVM会自动为args
分配给定的参数:
args[0] => firstArgument
args[1] => secondArgument
如果您使用 IDE ,您可能还可以在设置中的某处设置一些命令行参数(在Eclipse中,它位于运行配置设置中)。
有关official Oracle tutorial的更多信息。