Java陣列

2020-08-12 11:50:33

1.陣列
比如我要統計每位員工的工資,我得定義多個變數去分開儲存,因爲一個變數只能儲存一個數據,如果過多的員工, 太麻煩,那麼我怎麼用一個變數去儲存多個員工工資呢?
可以使用陣列,陣列就是一個大的容器,他可以儲存多個值
陣列的概念:陣列和變數差不多,都是存放數據的,不同的是變數只能儲存一條數據,而陣列可以儲存多條數據,前提是這個多條數據必須是同一型別的。
陣列既可以儲存基本數據型別,也可以儲存參照數據型別
2.一維陣列的定義
陣列型別[] 陣列名;
如果定義好陣列以後,必須要給陣列進行初始化。
陣列一旦初始化,長度不可變。長度確定下來了。
3.陣列的初始化
(1)動態初始化:指定陣列的長度,一旦長度指定,就是陣列中只能存放多少數據
兩種格式:
①陣列型別[] 陣列名=new 陣列型別[陣列長度];
int[] array=new int[9];
②陣列型別[] 陣列名;
陣列名=new 陣列型別[陣列長度];
double[] array1;
array1=new double[10];
(2)靜態初始化:不是指定陣列長度,而是直接在初始化陣列的同時給陣列賦值
兩種格式:
①陣列型別[] 陣列名=new 陣列型別[]{數據1,數據2……};
int[] array2=new int[]{8,9,45,20,19};
②陣列型別[] 陣列名;
陣列名=new 陣列型別[]{數據1,數據2……};
int[] array3;
array3=new int[]{67,89,90,1,34};
(3)還有一種最簡單的方式:
陣列型別[] 陣列名={數據1,數據2……};
int[] array4={12,3,4,6,2};
4.陣列常見問題
(1)//陣列越界異常:ArrayIndexOutOfBoundsException
int[] a=new int[2];
//System.out.println(a[2]=10);//錯誤的
(2)//空指針異常:NullPointerException
int[] b=null;
System.out.println(b[0]);
5.陣列的分類
(1)基本數據型別的陣列
動態初始化陣列以後,陣列的元素都會賦予一個預設值
byte 0
short 0
int 0
long 0
double0.0
float 0.0
char 空格
boolean false
(2)參照數據型別的陣列
String 介面 自己定義的類
參照數據型別的預設值爲null
6.java中記憶體的分配
記憶體的申請和釋放都是jvm進行管理的,java程式要執行,jvm會自動的向電腦申請一塊記憶體,
把這塊記憶體分爲5部分:
①棧(Stack):主要存放區域性變數(重點)
②堆(Heap):凡是new出來的東西都在堆裏面,堆裏面的數據都有預設原則:(重點) 整數:0,小數:0.0,布爾:false,char:空格,參照數據型別:null
③方法區(Method Area):存放的是與.class相關的資訊
④本地方法區(Native Method Area):與操作系統有關
⑤暫存器(Register):與cpu有關
7.陣列獲取最值

public static void main(String[] args) {
		//1.求出學生成績的總分、平均分、最高分、最低分
		int[] score=new int[]{90,89,56,87,98};
		//總分
		int sum=0;
		for(int i=0;i<score.length;i++){
			sum+=score[i];
		}
		System.out.println("總分:"+sum);
		//平均分
		int avg=sum/score.length;
		System.out.println("平均分:"+avg);
		//最高分
		int max=score[0];
		for(int i=0;i<score.length;i++){
			if(max<score[i]){
				max=score[i];
			}
		}
		System.out.println("最高分:"+max);
		//最低分
		int min=score[0];
		for(int i=0;i<score.length;i++){
			if(min>score[i]){
				min=score[i];
			}
		}
		System.out.println("最低分:"+min);
   }

8.陣列元素逆序

public static void main(String[] args) {
//2.{"C語言","C++","C#","Java","Python"};逆序輸出
String[] str=new String[]{"C語言","C++","C#","Java","Python"};
	for(int i=0;i<str.length/2;i++){
		String temp=str[i];
		str[i]=str[str.length-1-i];
		str[str.length-1-i]=temp;
	}
	for(String s:str){
		System.out.println(s);
	}
 }

9.氣泡排序(重點)
口訣(升序)
n個數字來排隊,兩兩想比小靠前,外層回圈n-1,內層回圈n-1-i

public static void main(String[] args) {
		//從大到小
		int[] array={76,3,234,90,6,78,1,-1};
		//外層回圈控制趟數
		for(int i=0;i<array.length-1;i++){
			//內層控制次數
			for(int j=0;j<array.length-i-1;j++){
				//比較  從大到小用<   從小到大用>
				if(array[j]<array[j+1]){
					int temp=array[j];
					array[j]=array[j+1];
					array[j+1]=temp;
				}
			}
		}
		for(int num:array){
			System.out.println(num);
		}
	}

10.二維陣列
陣列中的陣列
(1)宣告二維陣列:
數據型別[][] 陣列名;
第一個中括號:二維陣列中有幾個一維陣列 行
第二個中括號:每個一維陣列有多少元素 列
(2)初始化二維陣列
①動態初始化
②靜態初始化

public static void main(String[] args) {
		//1.建立一個二維陣列,並動態初始化
		//5代表5行或者表示包含5個一維陣列
		//7代表7列或者表示每個一維陣列的長度是7
		int[][] array=new int[5][7];
		
		//2.如何賦值
		//第一個一維陣列的第一個元素值爲10
		array[0][0]=10;
		//第四個一維陣列的第七個元素值爲5
		array[3][6]=5;
		System.out.println(array[0][0]);
		System.out.println(array[2][0]);
		
		//3.靜態初始化
		int[][] array1=new int[][]{{1,2},{2,3,4},{5,9,89,1}};
	    System.out.println(array1[2][2]);//89
	    
	    //簡寫
	    int[][] array2={{4,90},{23,12},{12,23,45}};
	    System.out.println("獲取二維陣列的長度:"+array2.length);
	    
	    //4.遍歷二維陣列
	    //外層回圈:控制行(每一個一維陣列)
	    for(int i=0;i<array2.length;i++){
	    	//內層回圈控制的是列
	    	for(int j=0;j<array2[i].length;j++){
	    		System.out.print(array2[i][j]+" ");
	    	}
	    	System.out.println();
	    }
	    System.out.println("使用增強for回圈=============");
        for(int[] i:array2){
        	for(int a:i){
        		System.out.print(a+" ");
        	}
        	System.out.println();
        }
	}