我在“calendarTable [i] [j] = str;”上遇到了一个越界异常下面的一行。我发现这很有趣,因为我将它初始化为15,我只迭代到14.我已经尝试初始化为20000,无论我做了多大的数组,它仍然会得到索引超出界限错误。
public static void main(String[] args) {
Calendar cal = new GregorianCalendar();
cal.set(2012, 2, 1);
cal.set(Calendar.DAY_OF_WEEK, 1);
int dayOfMonth = 1;
Object[][] calendarTable = new Object[15][15];
calendarTable[0] = new String[]{"SUNDAY", "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY"};
for (int i = 0; i < 14; i++) {
for (int j = 0; j < 14; j++) {
//calendarTable[i][j] = dayOfMonth++;
if(i%2 == 0){
String str = String.valueOf(cal.get(Calendar.DAY_OF_MONTH));
calendarTable[i][j] = str;
cal.add(Calendar.DAY_OF_YEAR, 1);
}else{
calendarTable[i][j] = dayOfMonth;
}
calendarTable[i * 2 + 1][j] = "TEST";
}
}
for (int i = 0; i < 14; i++) {
for (int j = 0; j < 14; j++) {
System.out.print(calendarTable[i][j]);
}
System.out.println("");
}
}
答案 0 :(得分:3)
您已将其初始化为15*15
,但随后立即用七项数组替换了初始条目。当你进入迭代时,元素零处的数组只有七个项目,而不是十五个。如果您想保留它15*15
,请将日期的名称复制到15个项目的数组中。
System.arrayCopy(
new String[]{"SUNDAY", "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY"}
, 0
, calendarTable[0]
, 0
, 7);
此外,如果您希望索引遍历数组的全长,请使用i != 15
,i < 15
或i <= 14
。
答案 1 :(得分:2)
因为您在index < 14
但是你在第二维只有7天。
FIX:如果您将所有14
更改为7
,则此异常将被修复,但您仍将确定所需的输出是否即将到来
答案 2 :(得分:1)
因为CalendarTable只有6个索引,当它超过该值时会死掉。
if (i % 2 == 0)
{
String str = String.valueOf(cal.get(Calendar.DAY_OF_MONTH));
System.out.println("current value of j: " + j);
calendarTable[i][j] = str;
cal.add(Calendar.DAY_OF_YEAR, 1);
}
current value of j: 0
current value of j: 1
current value of j: 2
current value of j: 3
current value of j: 4
current value of j: 5
current value of j: 6
current value of j: 7 //out of bounds
答案 3 :(得分:1)
你的问题在这里
calendarTable[i * 2 + 1][j]
如果i
等于8,那么8 * 2 + 1 = 17会给你异常
答案 4 :(得分:1)
calendarTable [0]的数组大小= 7个元素({“SUNDAY”,“星期一”,“星期二”,“星期三”,“星期四”,“星期五”,“星期六”}) 是否要分配最多可写入15个项目的值
答案 5 :(得分:1)
这是因为这一行:
calendarTable[0] = new String[]{"SUNDAY", "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY"};
calendarTable是一个数组数组。每行不一定需要具有与其上方相同数量的条目。因此,当您实际执行calendarTable[0] = new String[]
时,您告诉Java将calendarTable [0]上的数组替换为只有7个条目的新数组,这就是它超越边界的原因。
从理论上讲,没有什么能阻止你这样做:
calendarTable[1] = new String[]{"One Entry"};
这是合法的。 calendarTable[0].length
为7,calendarTable[1].length
为1。
我不知道你在这个程序中想要达到的目标,但你要么做这样的事情:
calendarTable[0][0] = "SUNDAY";
calendarTable[0][1] = "MONDAY";
calendarTable[0][2] = "TUESDAY";
calendarTable[0][3] = "WEDNESDAY";
calendarTable[0][4] = "THURSDAY";
calendarTable[0][5] = "FRIDAY";
calendarTable[0][6] = "SATURDAY";
或类似的东西:
calendarTable[0] = new String[]{"SUNDAY", "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "", "", "", "", "", "", "", "", ""};