Rumah > Java > javaTutorial > Penjelasan terperinci tatasusunan dalam ringkasan Java

Penjelasan terperinci tatasusunan dalam ringkasan Java

WBOY
Lepaskan: 2022-04-25 16:08:22
ke hadapan
2016 orang telah melayarinya

Artikel ini membawa anda pengetahuan yang berkaitan tentang java, yang terutamanya memperkenalkan isu berkaitan tatasusunan, termasuk peraturan penamaan, inferens jenis automatik, permulaan statik dan dinamik serta aspek lain tatasusunan berbilang dimensi Mari kita ambil lihat kaedah penulisan, kesilapan biasa dalam penulisan, dan lain-lain semoga ianya dapat membantu semua.

Penjelasan terperinci tatasusunan dalam ringkasan Java

Pembelajaran yang disyorkan: "tutorial video java"

Indeks: peraturan penamaan, inferens jenis automatik, pemulaan dinamik statik, berbilang tatasusunan dimensi Cara penulisan lain, ralat biasa, subskrip tatasusunan di luar had, isu nilai lalai, isu panjang tatasusunan, penghuraian memori tatasusunan

Cara penulisan yang betul:

1. Klasifikasi langkah : (Int berikut boleh digantikan dengan char String double, dll.)
①Kaedah menulis satu langkah:

int [] ids = new int []{1001,1002,1003};// 声明+初始化

int ids [] = new int []{1001,1002,1003}; // [ ]位置有两种放法


int ids [] = {1001,1002,1003};//自动类型推断,new int []可省


/**********错误示范***错误示范***错误示范***错误示范************/

int ids [] = new [] int{1001,1002,1003};//只有定义时的[]可以乱动
Salin selepas log masuk

Inferens Jenis Automatik: hanya terpakai dalam penulisan satu langkah, anda boleh meninggalkan int baharu di sebelah kanan [ ]

②Tulisan dua langkah:

int ids [] ;   //声明

ids = new int [ ] {1001,1002,1003} ;   //初始化

/**********错误示范***错误示范***错误示范***错误示范************/

int ids [];
ids [] = new int {1001,1002,1003};//分两步时,左边不加[]


int ids [];
ids = {1001,1002,1003};//分两步时,没有类型推断
Salin selepas log masuk

2 Klasifikasi status: statik dan dinamik mesti memilih salah satu daripada dua, jangan tambah {} pada panjang, jangan tambah panjang pada {}<. .> Susunatur berbilang dimensi

两个[ ]均为空
String [] name = new String [] {"张三","李四"} ;
//也可写为String [] name = {"张三","李四"};
Salin selepas log masuk
Masalah nilai lalai: dinamik [i][j] mempunyai nilai lalai, statik {} tidak mempunyai nilai lalai (penjelasan terperinci di penghujung)

后面的[ ]必须带数字规定长度,并且不能{}赋值

String [ ] name ;
name = new String [2] ;
//可以合为一步写String name [] = new String [2];

/**********错误示范****错误示范****错误示范********/
int ids [3][4] = XXXXXXXXX;
int ids [3][ ] = XXXXXXXXX;
int ids [ ][4] = XXXXXXXXX;
Salin selepas log masuk
Kes ralat:

Susun keluar subskrip of bounds:

int arr1 [][] =XXXXXXXXXXX;
int [] arr2 []=XXXXXXXXXXX;
int [][] arr3 =XXXXXXXXXXX;
//都是正确写法
Java主张 int [] arr = new int []{}; 写法



//多维数组同理
int [] arr[][] =XXXXXXXX;
int [][] arr[] =XXXXXXXX;
随便瞎基8放都是正确的
Java主张 int [][] arr = new int [][]{};写法

不过我个人不习惯。。。
Salin selepas log masuk
arr[1][1] tidak diberikan semasa nilai permulaan statik, jadi tiada ruang memori diperuntukkan Kompilasi boleh berlalu, tetapi ralat akan dilaporkan semasa mengakses. Julat tatasusunan permulaan statik ini dihadkan kepada arr[0][0] arr[0][1] hingga arr[1][0]
int arr0 [][] = {{1,2},{3,4},{5,6}};//正确:静态、自动类型推断
int arr1 [][] = new int [3][2];
int arr2 [][] = new int [3][ ];//正确:动态、可省列数[]
int arr3 [][][] = new int [3][ ][ ];//正确:动态、可省后两个[]
Salin selepas log masuk

Pemahaman memori mendalam: (penjelasan terperinci pada akhir ) Kod rentetan [][] = Rentetan baharu [3][ ];//Hanya baris ditakrifkan, bilangan lajur tidak diketahui System.out.println(cod[1][1] ]);//Lajur tidak ditakrifkan, tiada Berikan nilai lalai. Ralat berjalan

Kaedah penulisan yang betul: tambah satu langkah cod[1]=new String [234....]; >
int arr0 [][] = new int [2][2];//动态初始化,分配内存
//数组内的4个成员全部默认为0,编译运行都不会报错


int arr0 [][] = new int [][]{ {1,2},{3} };
//静态初始化,编译能通过,arr0[1][1]没有默认值(未分配空间)
//编译能通过,运行到arr[1][1]会报错



int arr0[][] = new int [3][] ;
// 输出arr0[3][0]  arr0[3][1]  arr0[3][2]  arr0[3][3].......
//都会报错
Salin selepas log masuk

Kesilapan biasa dalam penulisan

① int [ ] arr1 = new int [ ] ;                                                                                                                       int [3] arr2 = new int [3] ; //Depan [ ] mesti kosong

③ int [ ] arr3 = new int [5] { 1,2,3,4,5} ; //Dynamic tidak boleh mengandungi { }


Setelah tatasusunan ditentukan (diisytiharkan dimulakan), panjang ditetapkan dan panjang tatasusunan

tidak boleh ditukar Peruntukan memori adalah berterusan. Sistem mesti memperuntukkan ruang tetap untuk tatasusunan Jika memori diduduki oleh kandungan lain selepas 100 ruang, maka tatasusunan hanya boleh menggunakan 99 ruang pertama Jika panjang boleh diubah, maka arr[100] akan berubah kandungan lain untuk menjana pepijat

Contoh untuk menggambarkan masalah panjang tatasusunan:

Melintasi tatasusunan dua dimensi, dua lapisan untuk gelung:

Hasil berjalan:

arr.panjang ialah panjang dimensi pertama

arr[i].panjang ialah panjang dimensi kedua baris ke-i

arr[i ][j].panjang ialah panjang dimensi ketiga baris i dan lajur j

Analisis memori tatasusunan:

Ambil tatasusunan dua dimensi sebagai contoh, dibahagikan kepada lapisan dalam dan luar. Bentuk arr[0] arr[1] ialah lapisan luar, dan ungkapan lengkap arr[1][2] ialah lapisan dalam

1. Untuk lapisan luar arr[1], ia ialah tatasusunan Satu dimensi terbahagi kepada dua situasi: "dimulakan" dan "tidak dimulakan":

Contoh 1:

Pada masa ini, hanya bilangan baris luar diketahui , tetapi bahagian dalam Lapisan tidak dimulakan dan tiada alamat diberikan, jadi hasilnya adalah batal

Pada masa ini, panjang lapisan dalam ditentukan, permulaan selesai, arr1[1 ] menunjuk ke alamat pertama [I@15db9742
public class Test2 {
	public static void main(String args[]) {
	int arr[][] = { {1,2,3},{4,5,6,7},{8,9},{10}};
		
		for(int i = 0 ; i <arr.length ; i++){//arr.length
			for(int j = 0 ; j<arr[i].length ;j++){//arr[i].length
				System.out.println(arr[i][j]+"    ");
				}
                        System.out.println();		
}
		//System.out.println(arr[2][2]);报错下标越界
                }
}
Salin selepas log masuk

a [Menunjukkan bahawa lapisan dalam arr[1] ialah tatasusunan satu dimensi, I ialah huruf pertama int dan @ diikuti dengan alamat

Contoh 2:

Oleh kerana tatasusunan String ditakrifkan sepenuhnya, Oleh itu, ruang diperuntukkan dan arr1 menunjuk ke alamat arr1[0][0] (alamat pertama daripada keseluruhan tatasusunan)

两个[[表示里面有二维数组,java.lang.String;是包名

例3:

float arr1[][] = new float  [3][5];
System.out.println(arr1[0]);
//结果:[F@15db9742
Salin selepas log masuk

外层元素初始化值为:地址值

内层元素初始化值为:与一维数组初始化情况相同

一维数组初始化:

1.数组元素是整形int long short :  0

2.数组元素是浮点型float double : 0.0

3.数组元素是boolean型:false

4.数组元素是引用类型  : null

5.数组元素是char型 :0 或 '\u0000' 而非‘0’

数字0,而不是字符0,对应的ASCII码不一样

'\u0000'是Unicode码第0000号位,是一个空格符,但是不是键盘上的空格

验证如下:

經典例題:

 

解:b e可以,acdf都不行

推荐学习:《java视频教程

Atas ialah kandungan terperinci Penjelasan terperinci tatasusunan dalam ringkasan Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:csdn.net
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan