1. 程式人生 > >java怎麼通過方法返回二維陣列,並接收。

java怎麼通過方法返回二維陣列,並接收。

先演示錯誤的方法:

public static  int[][] getIntArr(){
	    int[][] arr={ {1,2,1},{2,1,2} };
	    return arr;
	}
這樣看起來是對的,但是繼續寫的時候會發現接收不了。如下圖:

出現的問題是:


靜態方法不能訪問非靜態成員(包括靜態方法和靜態變數),但非靜態方法可以靜態成員和非靜態成員
靜態成員屬於類所有,被類的所有物件共享,它在程式預編譯期間就能確定。非靜態成員屬於物件所有,而物件需要在程式執行期間分配空間。故在預編譯期間就能確定的靜態成員不能訪問需要在程式執行時才能確定的非靜態成員。
main是靜態方法,它只能訪問靜態成員,所以它可以訪問static的方法,不能訪問沒有static宣告的getIntArr方法,解決方法就是在成員宣告前加static關鍵字,表明該成員是靜態成員。

但是,加上static之後,getIntArr方法就不再是構造方法,而是一個成員方法。(沒有寫構造方法的時候,程式會自動增加一個看不見的無引數無操作的建構函式。)

所以正確的方法應該是:

public class getIntArr {
	public static  int[][] getIntArr(){
	    int[][] arr={ {1,2,1},{2,1,2} };
	    return arr;
	}
	public static void main(String[] args){		
		int[][] rs=getIntArr();
		System.out.println(rs);
		for(int i=0,j=0;i<rs.length;){
			System.out.print(rs[i][j]+" ");
			j++;
			if(j>=rs[i].length){
				i++;
				j=0;
				System.out.println();
			}
		}
	}
}

輸出結果為:

第一行,是用System.out.println輸出的一串字母+數字的字串,這個字串就是該陣列物件的記憶體地址。

另外用一層for迴圈的效率會比用兩層for迴圈效率要高一些。