[英]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.