簡體   English   中英

Java數組-初始化的數組超出范圍的異常

[英]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 != 15i < 15i <= 14

因為您正在循環運行直到index < 14

但是,您在第二維上只有7天。

FIX:如果將所有出現的次數都更改為147則此異常將得到解決,但是您仍將確保所需的輸出是否到來。

因為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM