簡體   English   中英

你如何在 java 方法中訪問 int arrays

[英]How do you access int arrays in java methods

我試圖聲明一個二維整數數組,在構造函數中設置它的大小,並在方法中更改數組的值。 當我編譯它時,我得到“無法存儲到 int 數組,因為“this.a”為空”。 我不確定我做錯了什么。

public class arrays {
    int[][] a;

    public arrays(){
        int[][] a = new int[10][10];
    }
    public void m(){
        a[0][0] = 1;
        System.out.println(a[0][0]);
    }
    public static void main(String[] args){
        arrays Ar = new arrays();
        Ar.m();
    }
}
 int[][] a = new int[10][10];

這是int[][] a; a = new int[10][10]; - int[][] a; 聲明一個新變量 它與您的字段同名,因此現在兩個不同的東西,都命名為a ,都在“范圍”中; 局部變量 'wins' - a = new int[10][10]; 創建一個新數組,然后將對它的引用分配給名為a局部變量,而不是分配給名為a的字段。 然后構造函數結束,所有局部變量都被丟棄,因為一旦方法/構造函數退出,局部變量總是會發生這種情況:它們消失了。 換句話說,您創建了一個新數組,但沒有任何引用; 您名為a的字段沒有指向它,因為您沒有更改它。

只是a = new int[10][10]; 將完成工作,因為現在沒有也名為a局部變量,因此a現在指的是您擁有的字段。

或者,甚至更簡單,完全擺脫你的構造函數,並在你聲明它時初始化你的數組:

public class Arrays {
    int[][] a = new int[10][10];
    
    public void m() {
        a[0][0] = 1;
        System.out.println(a[0][0]);
    }

    public static void main(String[] args) {
        Arrays ar = new Arrays();
        ar.m();
    }
}

這都是關於范圍界定的。

1- 您的 class 中有一個名為int[][] a屬性

2- 你有另一個int[][] a ,它是構造函數中的局部變量,因為你定義了另一個 int[][]。

因此,正如 @Turing85 所說,只需刪除構造函數中的 int[][] 類型定義,那一行應該是a = new int[10][10];

附加信息:

當您在構造函數中定義另一個 int[][] a 時,會有多個a 在將 new int[10][10] 分配給 a 時,使用范圍最接近的一個(在構造函數內部)。 練習范圍界定可能對您有用。

您必須在初始化數組之前聲明大小

public class CustomArrays {
    int[][] a = new int[10][10];

    public void m(){
        a[0][0] = 1;
        System.out.println(a[0][0]);
    }
    public static void main(String[] args){
        CustomArrays Ar = new CustomArrays();
        Ar.m();
    }
}

或這個

public class CustomArrays {
    int[][] a = new int[10][10];

   CustomArrays() {
      a[0][0]=1;
   }

    public void m(){  
        System.out.println(a[0][0]);
    }
    public static void main(String[] args){
        CustomArrays Ar = new CustomArrays();
        Ar.m();
    }
}

public class CustomArrays {
    int[][] a;

    public CustomArrays() {
         a = new int[10][10];
         a[0][0] = 1;
    }

    public void m() {

        System.out.println(this.a[0][0]);
    }

    public static void main(String[] args) {
        CustomArrays Ar = new CustomArrays();
        Ar.m();
    }
}

所有的工作。

暫無
暫無

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

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