4--黑馬程式設計師--技術總結之陣列
<span style="white-space: pre; color: rgb(68, 68, 68); font-family: 'Microsoft Yahei', 微軟雅黑, Tahoma, Arial, Helvetica, STHeiti; font-size: 14px; line-height: 21px;"> ----------------------<a target=_blank target="_blank" href="http://www.itheima.com/" style="color: rgb(51, 102, 153); text-decoration: none;">ASP.Net+Unity開發</a></span><span style="white-space: pre; color: rgb(68, 68, 68); font-family: 'Microsoft Yahei', 微軟雅黑, Tahoma, Arial, Helvetica, STHeiti; font-size: 14px; line-height: 21px;">、<a target=_blank target="_blank" href="http://www.itheima.com/" style="color: rgb(51, 102, 153); text-decoration: none;">.Net培訓</a></span><span style="white-space: pre; color: rgb(68, 68, 68); font-family: 'Microsoft Yahei', 微軟雅黑, Tahoma, Arial, Helvetica, STHeiti; font-size: 14px; line-height: 21px;">、期待與您交流! ----------------------</span>
一.陣列的定義
所謂陣列,就是相同資料型別的元素按一定順序排列的集合,就是把有限個型別相同的變數用一個名字命名,然後用編號區分他們的變數的集合,這個名字成為陣列名,編號成為下標。組成陣列的各個變數成為陣列的分量,也稱為陣列的元素,有時也稱為下標變數。陣列是在程式設計中,為了處理方便, 把具有相同型別的若干變數按有序的形式組織起來的一種形式。這些按序排列的同類資料元素的集合稱為陣列。
陣列的示意圖:
陣列的格式:
一維陣列:
陣列元素型別 陣列名字[];例如 int arr[];
陣列元素型別[] 陣列名字;例如 int[] arr;
二維陣列:
陣列元素型別 陣列名字[][];例如 int arr[][];
陣列元素型別[][] 陣列名字;例如 int[][] arr;
注意事項:1)陣列元素的型別可以是任意一種型別,類型別也可以,比如這個陣列People china[]; 陣列china中可以存放People型別的資料。
2)陣列中的各元素是有先後順序的,它們在記憶體中按照這個先後順序連續存放在一起。
3)陣列元素用整個陣列的名字和它自己在陣列中的順序位置來表示。例如,a[0]表示名字為a的陣列中的第一個元素,a[1]代表陣列a的第二個元素,以此類推。
二.陣列的建立
在Java中,建立陣列的格式如下:
格式1:陣列元素型別[] 陣列名字 = new 陣列元素型別[陣列元素的個數或陣列長度];
例如:int[] arr = new int[10]; //動態初始化,可以隨時賦初始值
格式2:陣列元素型別[] 陣列名字 = new 陣列元素型別[]{元素1,元素2,····元素n};
例如:int[] arr = new int[]{1,2,3,4,5,6,7,8,9,0,}; //靜態初始化,已經賦好初始值
程式碼示例
- public class ArrayDemo1 {
- /**
- * 使用陣列的建立的兩種方式並列印輸出
- * @黑馬ZWF
- */
- public static void main(String[] args) {
- int[] arr1 = new int[5];
- for(int x = 0; x <arr1.length; x++) {
- System.out.println(arr1[x]); //輸出結果為0,0,0,0,0 因為沒有賦初始值
- }
- int[] arr2 = new int[]{1,2,3,4,5,6,7,8,9,0};
- for(int x = 0; x <arr2.length; x++) {
- System.out.println(arr2[x]); //輸出結果為1,2,3,4,5,6,7,8,9,0
- }
- }
- }
三.陣列的應用
1)陣列的遍歷(for迴圈的另一種用法foreach)
- public class ArrayDemo1 {
- /**
- * 使用for迴圈的另一種方法遍歷陣列並列印輸出
- * @黑馬ZWF
- */
- public static void main(String[] args) {
- int[] arr = new int[]{1,2,3,4,5,6,7,8,9,0};
- for(int x:arr) {
- System.out.print(x); //輸出結果為1234567890
- }
- }
- }
2)獲取最值
- public class ArrayDemo2 {
- /**
- * 遍歷陣列或缺陣列的最大值並列印輸出
- * @黑馬ZWF
- */
- public static void main(String[] args) {
- int[] arr = new int[]{24,13,12,45,78,06,43};
- int temp = 0; //定義中間變數並賦初值
- for(int x = 0; x <arr.length; x++) {
- if(arr[x] > temp) {
- temp = arr[x];
- }
- }
- System.out.println("該陣列的最大值是" + temp); //輸出結果為:該陣列的最大值是78
- }
- }
3)陣列排序(氣泡排序和選擇排序
- public class ArrayDemo3 {
- /**
- * 用冒泡法和選擇排序法實現對陣列的排序並列印輸出
- * @黑馬ZWF
- */
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- int[] arr = new int[]{213,432,645,752,234,123};
- bubbleSort(arr); //輸出結果為:123 213 234 432 645 752
- System.out.println();
- selectSort(arr); //輸出結果為:752 645 432 234 213 123
- }
- public static void bubbleSort(int[] arr) { //氣泡排序法
- for(int x = 0; x <arr.length - 1; x++) { //最多進行arr.length-1次遍歷
- for(int y = 0; y <arr.length - 1 - x; y++) {
- if (arr[y] > arr[y + 1]) { //從小到大輸出
- change(arr, y, y+1);
- }
- }
- }
- printArray(arr);
- }
- public static void selectSort(int[] arr) { //選擇排序法
- for(int x = 0; x <arr.length - 1; x++) {
- for(int y = x + 1; y <arr.length; y++) {
- if (arr[x] <arr[y]) { //從大到小輸出
- change(arr, x, y);
- }
- }
- }
- printArray(arr);
- }
- public static void printArray(int[] arr) { //列印陣列
- for(int x = 0; x <arr.length; x++) {
- System.out.print(arr[x]+" ");
- }
- }
- public static void change(int[] arr, int x, int y){ //交換資料的方法
- int temp = arr[x];
- arr[x] = arr[y];
- arr[y] = temp;
- }
- }
4)陣列的查詢
- public class ArrayDemo4 {
- /**
- * 在陣列中查詢指定的值並列印輸出
- * @黑馬ZWF
- */
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- int[] arr = new int[]{123,324,54,6,89,634,64};
- seekNumber(arr,64); //輸出結果是:該數字在此陣列的第7個位置
- seekNumber(arr,23); //輸出結果是:在此陣列中沒有沒有找到該數字!
- }
- public static void seekNumber(int[] arr,int a) {
- int temp = 0; //設定中間變數判斷是否查詢到該數字
- for(int x = 0; x <arr.length; x++) {
- if(arr[x] == a) { //迴圈遍歷,查詢是否有目的數字
- x++;
- temp = x;
- }
- }
- if (temp !=0){
- System.out.println("該數字在此陣列的第" + temp + "個位置" );
- }
- else {
- System.out.println("在此陣列中沒有沒有找到該數字!");
- }
- }
- }
5)字元陣列的應用
- public class ArrayDemo5{
- /**
- * 判斷一個字串是否是對稱字串
- * 例如"abc"不是對稱字串,"aba"、"abba"、"aaa"、"mnanm"是對稱字串
- * @黑馬ZWF
- */
- public static void main(String argu[]){
- String[] str = {"abc","aba","abba","aaa","mnanm"}; //定義字串陣列
- for(int i = 0; i <str.length; i++){
- System.out.println(str[i] + " is " + symmetry(str[i])); //呼叫symmetry方法判斷並輸出結果
- }
- }
- public static boolean symmetry(String str) { //判斷字串是否對稱的方法
- if (null == str) {
- return false;
- }
- for (int i = 0; i <str.length() / 2; i++) {
- if (str.charAt(i) != str.charAt(str.length() - i-1)) {
- return false;
- } //遍歷比較,從字串中間開始比較兩邊的字元是否相等,有不等的就不是對稱的
- }
- return true; //遍歷比較完後,沒有不相等的字元,即為對稱字串,返回true值
- }
- }
- public class ArrayDemo6 {
- /**利用陣列儲存資料進行進位制之間的轉換
- * @黑馬ZWF
- */
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- toBinaryNumber(16); //輸出結果為:10000
- toHexNumber(125);
- }
- public static void toBinaryNumber(int num) { //十進位制轉二進位制
- StringBuffer sb = new StringBuffer(); //利用StringBuffer容器儲存資料
- while (num > 0){
- sb.append(num % 2);
- num = num / 2;
- }
- System.out.println(sb.reverse()); //將容器裡的資料反向輸出