簡體   English   中英

為什么這個簡單的代碼會拋出 ArrayIndexOutOfBoundsException?

[英]Why does this simple code throw ArrayIndexOutOfBoundsException?

這只是一個虛擬代碼。 因為我是 JAVA 新手,所以我不明白出了什么問題。

我已經提到: 是什么導致了 java.lang.ArrayIndexOutOfBoundsException 以及如何防止它? 那里的答案僅與使用錯誤的長度索引有關。

代碼:

class abc{
    static int n;
    static int[] arr=new int[n];
    static void print_arr(){
        for(int x: arr) System.out.print(x+" ");
    }
}
class Main {
    public static void main(String[] args) {
        abc.n=5;
        for(int i=0;i<abc.n;i++){
            abc.arr[i]=10;
        }
        abc.print_arr();
    }
}

我希望此代碼打印 10 次 5 次。

一種可能的方式。

class abc{
static int n;
static int[] arr;
static void init(int size) {
    arr=new int[size];
}
static void print_arr(){
    for(int x: arr) System.out.print(x+" ");
} }


class Main {
public static void main(String[] args) {
    abc.n=5;
    init(abc.n);
    for(int i=0;i<abc.n;i++){
        abc.arr[i]=10;
    }
    abc.print_arr();
} }

更好的方法

class ABC{
 private int size;
 private int[] arr;

ABC(int n) {
    size = n;
    arr = new int[n];
}   

public void print_arr(){
    for(int x: arr) 
    System.out.print(x+" ");
}

public int getSize() {
    return size;
}

public int[] getArray() {
    return java.util.Arrays.copyOf(arr,arr.length);
}

public void setArray(int [] array) {
    arr = array.clone();
} }


class Main {
public static void main(String[] args) {

    int size = 5;
    ABC abc = new ABC(size);

    int [] array = new int[size];

    for(int i=0;i<abc.getSize();i++){
        array[i]=10;
    }
    abc.setArray(array);

    abc.print_arr();
} }
class abc
{
    static int n=5;
    static int[] arr=new int[n];
    static void print_arr()
    {
        for(int x: arr) System.out.print(x+" ");
    }
}
class Main 
{
    public static void main(String[] args) 
   {
        for(int i=0;i<abc.n;i++)
        {
            abc.arr[i]=10;
        }
        abc.print_arr();
    }
}

在您的情況下,發生 ArrayIndexOutOfBounds 異常是因為您試圖通過尚未初始化的變量來初始化數組。 所以要么在數組初始化之前用一個值初始化 n 要么使用動態大小的數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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