Java基礎語法03-數組-一維-二維

數組

數組概念: 數組就是用於存儲數據的長度固定的容器,多個數據的數據類型要一致。html

百科:數組(array),就是相同數據類型的元素按必定順序排列的集合,就是把有限個類型相同的變量用一個名字命名,以便統一管理他們,而後用編號區分他們,這個名字稱爲數組名,編號稱爲下標或索引(index)。組成數組的各個變量稱爲數組的元素(element)。數組中元素的個數稱爲數組的長度(length)。數組

數組的特色:url

一、數組的長度一旦肯定就不能修改spa

二、建立數組時會在堆內存中開闢一整塊連續的空間。.net

三、存取元素的速度快,由於能夠經過[下標],直接定位到任意一個元素。指針

數組的聲明:

//推薦
元素的數據類型[] 一維數組的名稱;code

//不推薦
元素的數據類型 一維數組名[];htm

靜態初始化

1)數據類型[] 數組名 = {元素1,元素2,元素3...};      //必須在一個語句中完成,不能分開兩個語句寫對象

2)數據類型[] 數組名 = new 數據類型[]{元素1,元素2,元素3...};

數據類型[] 數組名;
數組名 = new 數據類型[]{元素1,元素2,元素3...};blog

注意:後面有{}指定元素,就不須要在[長度]指定長度。  //長度由元素個數自動定義

動態初始化

數組數據類型[] 數組名字 = new 數組數據類型[長度];

數組數據類型[] 數組名字;
數組名字 = new 數組數據類型[長度];

  • 元素的類型能夠是任意的Java的數據類型。例如:int, String, Student等

  • [] : 表示數組。

  • 數組名字:爲定義的數組起個變量名,知足標識符規範,可使用名字操做數組。

  • new:關鍵字,建立數組使用的關鍵字。由於數組自己是引用數據類型,因此要用new建立數組對象。//new至關於運算符,存放在堆內存中

  • [長度]:數組的長度,表示數組容器中能夠存儲多少個元素。

  • 注意:數組有定長特性,長度一旦指定,不可更改。

數組元素的訪問

索引: 每個存儲到數組的元素,都會自動的擁有一個編號,從0開始,這個自動編號稱爲數組索引(index),能夠經過數組的索引訪問到數組中的元素。

索引範圍:[0, 數組的長度-1]    //數組名記錄着數組元素首地址的值,下標0-數組名.length-1表示距離首地址的距離

數組名[索引]

索引訪問數組中的元素:

  • 數組名[索引]=數值,爲數組中的元素賦值

  • 變量=數組名[索引],獲取出數組中的元素

數組的遍歷

數組的長度屬性: 每一個數組都具備長度,並且是固定的,Java中賦予了數組的一個屬性,能夠獲取到數組的長度,語句爲:數組名.length ,屬性length的執行結果是數組的長度,int類型結果。由此能夠推斷出,數組的最大索引值爲數組名.length-1

for(int i=0; i<arr.length; i++){
  System.out.println(arr[i]);
}

for(int x:arr){      //for加強版,專門用於數組的訪問(類型爲要訪問的數組類型)

  System.out.print(x);

}

數組元素的默認值

數組內存圖

內存是計算機中重要的部件之一,它是與CPU進行溝通的橋樑。其做用是用於暫時存放CPU中的運算數據,以及與硬盤等外部存儲器交換的數據。只要計算機在運行中,CPU就會把須要運算的數據調到內存中進行運算,當運算完成後CPU再將結果傳送出來。咱們編寫的程序是存放在硬盤中的,在硬盤中的程序是不會運行的,必須放進內存中才能運行,運行完畢後會清空內存。

Java虛擬機要運行程序,必需要對內存進行空間的分配和管理。

理解Java虛擬機對變量,數組,方法等的內存管理方式很是有助於理解程序的運行機制,便於編寫程序時變量的賦值與方法的調用。更多關於Java虛擬機的內存管理機制請看Java虛擬機篇

int[] arr = new int[3];

數組統計:求總和、均值、統計偶數個數等

思路:遍歷數組,挨個的累加,判斷每個元素

數組找最值

(1)先假設第一個元素最大/最小

(2)而後用max/min與後面的元素一一比較

數組中找最值及其下標

(1)先找最大值

①假設第一個元素最大

②用max與後面的元素一一比較

(2)遍歷數組,看哪些元素和最大值是同樣的

冒泡排序

1)依次比較相鄰的兩個數,將小數放到前面,大數放到後面。

2)須要比較數組.length-1輪        //設i=1,i<arr.length

for(int i = 1;i < arr.length;i++){

  boolean flag = true;

  for(int j = 0;j < arr.length - i - 1;j++){

    if(arr[j] > arr[j + 1]{

      int temp = arr[j];

      arr[j] = arr[j + 1];

      arr[j + 1] = temp;

      flag = false;

    }

  }

  if(flag){

    break;

  }

}

二維數組

  • 二維數組:本質上就是元素爲一維數組的一個數組。

  • 二維數組的標記:[][]

二維數組也能夠當作一個二維表,行*列組成的二維表,只不過這個二維表,每一行的列數還可能不一樣。可是每個單元格中的元素的數據類型是一致的

語法格式:

//推薦
元素的數據類型[][] 二維數組的名稱;

//不推薦
元素的數據類型 二維數組名[][];
//不推薦
元素的數據類型[] 二維數組名[];

靜態初始化:

元素的數據類型[][] 二維數組名 = new 元素的數據類型[][]{
              {元素1,元素2,元素3 。。。},
              {第二行的值列表},
              {第n行的值列表}
};

元素的數據類型[][] 二維數組名;
二維數組名 = new 元素的數據類型[][]{
      {元素1,元素2,元素3 。。。},
      {第二行的值列表},
      {第n行的值列表}
};
//如下格式要求聲明與靜態初始化必須一塊兒完成
元素的數據類型[][] 二維數組的名稱 = {
                {元素1,元素2,元素3 。。。},
                {第二行的值列表},
                {第n行的值列表}
};

若是是靜態初始化,右邊new 數據類型[][]中不能寫數字,由於行數和列數,由{}的元素個數決定

動態初始化(規則二維表:每一行的列數是相同的)

(1)肯定行數和列數
元素的數據類型[][] 二維數組名 = new 元素的數據類型[m][n];
m:表示這個二維數組有多少個一維數組。或者說一共二維表有幾行
n:表示每個一維數組的元素有多少個。或者說每一行共有一個單元格

//此時建立完數組,行數、列數肯定,並且元素也都有默認值

(2)再爲元素賦新值
二維數組名[行下標][列下標] = 值;

動態初始化(不規則:每一行的列數可能不同)

(1)先肯定總行數
元素的數據類型[][] 二維數組名 = new 元素的數據類型[總行數][];

//此時只是肯定了總行數,每一行裏面如今是null

(2)再肯定每一行的列數
二維數組名[行下標] = new 元素的數據類型[該行的總列數];

//此時已經new完的行的元素就有默認值了,沒有new的行仍是null

(3)再爲元素賦值
二維數組名[行下標][列下標] = 值;

表示方式

二維數組名.length

二維數組名[行下標].length

二維數組名[行下標][列下標]

二維數組的遍歷

for(int i=0; i<二維數組名.length; i++){
  for(int j=0; j<二維數組名[i].length; j++){
    System.out.print(二維數組名[i][j]);
  }
  System.out.println();
}

ArrayIndexOutOfBoundsException 數組越界異常。

NullPointerException 空指針異常。

相關文章
相關標籤/搜索