[英]Java array - Out of bounds exception on an initialized array
我在“ 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("");
}
}
您已將其初始化為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
。
因為您正在循環運行直到index < 14
但是,您在第二維上只有7天。
FIX:如果將所有出現的次數都更改為14
到7
則此異常將得到解決,但是您仍將確保所需的輸出是否到來。
因為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
你的問題在這里
calendarTable[i * 2 + 1][j]
如果i
等於8,則8 * 2 +1 = 17給您例外
calendarTable [0] = 7個元素的數組大小({“ SUNDAY”,“ MONDAY”,“ TUESDAY”,“ WEDNESDAY”,“ THURSDAY”,“ FRIDAY”,“ SATURDAY”})是否要分配一個值最多寫15個項目
這是因為行:
calendarTable[0] = new String[]{"SUNDAY", "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY"};
calendarTable是一個數組數組。 每一行不一定需要具有與其上方相同的條目數。 因此,當您實際執行calendarTable[0] = new String[]
,您是在告訴Java用只有7個條目的新數組替換calendarTable [0]處的數組,這就是為什么它超出界限的原因。
從理論上講,沒有什么可以阻止您執行此操作:
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", "", "", "", "", "", "", "", "", ""};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.