數(shù)組(array)數(shù)組就是多個相同類型數(shù)據(jù)的組合,,實現(xiàn)對這些數(shù)據(jù)的統(tǒng)一管理,。 數(shù)組中的元素可以是任何數(shù)據(jù)類型,,包括基本數(shù)據(jù)類型和引用數(shù)據(jù)類型,。數(shù)組屬引用類型,數(shù)組型數(shù)據(jù)是對象(object),, ? ? 數(shù)組的分類: 一維數(shù)組,、二維數(shù)組、三維數(shù)組...多維數(shù)組:從二維開始都算多維數(shù)組,,一般到二維就差不多了,。 二維數(shù)組又稱為矩陣。 先把一行看成一個整體的話,,二維數(shù)組就是一個“特殊一維數(shù)組” 二維數(shù)組的行數(shù),,就是“特殊一維數(shù)組”的長度,二維數(shù)組名.length,; 一行同時又是一個一維數(shù)組,,一行的列數(shù),行.length,; 行:就是“特殊一維數(shù)組”的一個元素,,二維數(shù)組名[下標] 二維數(shù)組的相關表示方式: 行:二維數(shù)組名[行下標] 行下標的范圍[0, 總行數(shù)-1] 元素:二維數(shù)組名[行下標][列下標] 列下標的范圍[0, 該行的總元素的個數(shù)-1] 行數(shù):二維數(shù)組名.length 每一行的列數(shù):二維數(shù)組名[行下標].length 二維數(shù)組如何聲明? 元素的數(shù)據(jù)類型[][] 二維數(shù)組名; 例如:要存儲每一組的學員的成績,,構成全班的成績數(shù)組,。 二維數(shù)組的初始化? 1,、靜態(tài)初始化 二維數(shù)組名 = new 元素的數(shù)據(jù)類型[][]{{第一行的元素列表},{第二行的元素列表}....}; 聲明 靜態(tài)初始化:元素的數(shù)據(jù)類型[][] 二維數(shù)組名 = {{第一行的元素列表},{第二行的元素列表}....}; int[][] scores2; //1. 先聲明 scores2 = new int[][]{{1,2,3},{3,4,5},{6}}; //2.靜態(tài)初始化 2、動態(tài)初始化 一維數(shù)組的動態(tài)初始化: 一維數(shù)組名 = new 元素的數(shù)據(jù)類型[長度]; 二維數(shù)組的動態(tài)初始化: 1,、每一行的列數(shù)是相同的,,規(guī)則的矩陣 二維數(shù)組名 = new 元素的數(shù)據(jù)類型[行數(shù)][列數(shù)]; 2、每一行的列數(shù)是不相同的,,不規(guī)則的矩陣 ?。?)第一步先確定總行數(shù) 二維數(shù)組名 = new 元素的數(shù)據(jù)類型[行數(shù)][]; ?。?)依次確定每一行的列數(shù) 行 = new 元素的數(shù)據(jù)類型[列數(shù)]; for(int i = 0; i < arr.length; i ){ //確定每行的列數(shù); --->> 為元素賦值 --->> 遍歷顯示 --->>換行 arr[i] = new int[i 1]; } String[][] names; //1.二維數(shù)組的聲明 //names = new String[6][5];//動態(tài)初始化的方式一 names = new String[6][0]; //動態(tài)初始化的方式二,先確定行數(shù),;再確定列數(shù),。 names[0] = new String[5]; names[1] = new String[3]; names[2] = new String[7]; names[3] = new String[9]; names[4] = new String[2]; names[5] = new String[4]; 二維數(shù)組如何為元素賦值 二維數(shù)組名 [行下標][列下標] = 值; 二維數(shù)組的遍歷 for(int i=0; i<行數(shù); i ){ for(int j=0; j<每一行的列數(shù); j ){ 元素:二維數(shù)組名[行下標][列下標],,即二維數(shù)組名[i][j] } } ? 數(shù)組的遍歷/賦值 最高分和最低分 數(shù)組的反轉 class ShuZu{ public static void main(String[] args){ java.util.Scanner input = new java.util.Scanner(System.in); //輸入小組人數(shù) System.out.print("請輸入小組人數(shù):"); int count = input.nextInt(); //聲明和初始化name和score數(shù)組 String[] name; //先聲明 name = new String [count]; //動態(tài)初始化 int[] score = new int[count]; //聲明 動態(tài)初始化 //遍歷數(shù)組賦值 for (int i = 0; i < name.length; i ){ System.out.print("第" (i 1) "個同學的名字:"); name[i] = input.next(); System.out.print("第" (i 1) "個同學的成績:"); score[i] = input.nextInt(); } //遍歷數(shù)組 System.out.println("學生姓名和成績?nèi)缦?"); for (int i = 0;i < name.length;i ){ System.out.print(name[i] ":"); System.out.print(score[i] "分" "\n"); } //對數(shù)組score進行遍歷找出最高分和最低分 int max = score[0]; int min = score[0]; int indexMax = 0;// int indexMin = 0; int sum = 0; for(int i = 0; i < score.length; i ){ //也可以i < count; sum = score[i]; if(max < score[i]){ max = score[i]; indexMax = i; }if(min > score[i] ){ min = score[i]; indexMin = i; } }System.out.println("第" (indexMax 1) "個同學" name[indexMax] "的成績是最高的為:" max); System.out.println("第" (indexMin 1) "個同學" name[indexMin] "的成績是最高的為:" min); System.out.println("總分為:" sum "平均分是:" sum/count); //數(shù)組的反轉(首尾對應位置交換,借助第三個變量) for(int i = 0;i <= score.length/2; i ){ int temp = score[i]; score[i] = score[score.length-1-i]; //[1,2,3,4,5,6] 1(0)和6(5),;2(1)和5(4)... score[score.length-1-i] = temp; } for(int i = 0; i< score.length;i ){ System.out.print(score[i] "\t"); } //數(shù)組的反轉,方法二:借助一個空(新)數(shù)組 int[] temp = new int[count]; for(int i = 0;i < score.length;i ){ temp[i]=score[score.length-1-i]; } score = temp; //廢棄舊數(shù)組,指向新數(shù)組 for(int i = 0;i < score.length;i ){ System.out.print(score[i] "\t"); } } } ? ?由基本數(shù)據(jù)類型創(chuàng)建的數(shù)組它的默認值: public class TestArray0 { public static void main(String[] args){ //對于基于基本數(shù)據(jù)類型的變量創(chuàng)建的數(shù)組:byte short int long float double char boolean //1.對于byte short int long而已:創(chuàng)建數(shù)組以后,,默認值為0 int[] scores = new int[4]; scores[0] = 89; scores[3] = 90; for(int i = 0;i < scores.length;i ){ System.out.println(scores[i]); } //2.對于float double而言,;默認值是0.0 float[] f = new float[3]; f[0] = 1.2F; for(int i = 0; i < f.length;i ){ System.out.println(f[i]); } System.out.println(); //3.對于char而言,默認是空格 char[] c = new char[3]; for(int i = 0; i < c.length;i ){ System.out.println(c[i]); } System.out.println(); //4.對于boolean而言,,默認是false boolean[] b = new boolean[3]; for(int i = 0; i < b.length;i ){ System.out.println(b[i]); } System.out.println(); //5.對于引用類型的變量構成的數(shù)組而言:默認初始化值為null,。以String為例 String[] strs = new String[4]; strs[0] = "AA"; strs[1] = "BB"; //strs[2] = "CC"; 默認為null strs[3] = "DD"; //遍歷數(shù)組的元素 for (int i = 0;i < strs.length;i ){ System.out.println(strs[i]); } //自定義的類 System.out.println(); Person[] pers = new Person[3]; for(int i = 0; i < pers.length;i ){ System.out.println(pers[i]); } } } class Person{ } ? ? 數(shù)組在內(nèi)存中的結構 ? ?整個內(nèi)存里邊的基本結構就分這4部分: ?new出來數(shù)組、對象,; 方法區(qū):類名,、包名、方法的定義等,;常量池,、字符串常量池等,想用哪個從池子里邊拿 靜態(tài)區(qū):靜態(tài)的變量,,用static修飾的變量等,。 以數(shù)組為例,看它如何使用內(nèi)存結構的: java虛擬機進行解釋運行對它進行初始化,,棧先進后出,scores變量先存放在棧里邊,,每個內(nèi)存里邊都對應一個地址,;new出來的放在堆里邊。通過地址進行對應 ? ? ? ? public class TestArray { public static void main(String[] args){ //1.如何定義一個數(shù)組 //1.1數(shù)組的聲明 String[] names; int scores[]; //1.2初始化 //第一種:靜態(tài)初始化:初始化數(shù)組與給數(shù)組賦值同時進行,。 names = new String[]{"kris","alex","egon"}; //第二種:動態(tài)初始化:初始化數(shù)組與給數(shù)組元素賦值分開進行,。 scores = new int[4]; //2.如何調(diào)用相應的數(shù)組元素:通過數(shù)組元素的下角標的方式來調(diào)用。 //下角標從0開始,,到n-1結束,,其中n表示數(shù)組的長度。 scores[0] = 87; scores[1] = 88; scores[3] = 90; //3.數(shù)組的長度:通過數(shù)組的length屬性,。 System.out.println(names.length);//3 System.out.println(scores.length); //4 //4.如何遍歷數(shù)組元素 // System.out.println(names[0]); // System.out.println(names[1]); // System.out.println(names[2]); for (int i = 0; i < names.length; i ){ System.out.println(names[i]); } } } ? //數(shù)組一旦初始化,,其長度是不可變的 public class TestAarry1 { public static void main(String[] args){ int[] i = new int[]{12,13,14}; int[] j = new int[10]; for(int k = 0;k < i.length;k ){ j[k] = i[k]; } j[3] = 15; j[4] = 16; for(int k = 0; k < j.length;k ){ System.out.println(j[k]); } } } ? ? ? package com.du.bai.www; public class TestArry2 { public static void main(String[] args){ int[] scores1 = new int[10]; int[][] scores2; String[][] names; //1.二維數(shù)組的初始化 scores2 = new int[][]{{1,2,3},{3,4,5},{6}}; //靜態(tài)初始化 names = new String[6][5];//動態(tài)初始化的方式一 names = new String[6][0]; //動態(tài)初始化的方式二 names[0] = new String[5]; names[1] = new String[3]; names[2] = new String[7]; names[3] = new String[9]; names[4] = new String[2]; names[5] = new String[4]; //錯誤的初始化方式 //names = new String[][]; //names = new String[][5]; //2.如何來引用具體的某一個元素 int[][] i = new int[3][2]; //int[] i[] = new int[3][2]; i[1][0] = 90; i[2][1] = 89; //3.數(shù)組的長度 //二維數(shù)組的長度;length屬性 System.out.println(i.length); //3 //二維數(shù)組中元素的長度 System.out.println(i[0].length); //2 System.out.println(names.length); //6 System.out.println(names[4].length); //8 System.out.println(); //4.如何遍歷二維數(shù)組 for(int m = 0; m < scores2.length;m ){ //控制行數(shù) for(int n = 0;n < scores2[m].length;n ){ System.out.print(scores2[m][n] " "); } System.out.println(); } } } ? ? ? 異常: public class TestException { public static void main(String[] args){ //1.數(shù)組下標越界異常:java.lang.ArrayIndexOutOfBoundsException int[] i = new int[10]; //i[0] = 90; //i[10] = 99; // for (int m = 0;m <= i.length;m ){ // System.out.println(i[m]); // } //2.空指針的異常:NullPointerException //第一種: // boolean[] b = new boolean[3]; // b = null; // System.out.println(b[0]); //第二種: // String[] str = new String[4]; // str[3] = new String("AA"); //str[3] = "AA"; // System.out.println(str[3].toString()); //第三種: int[][] j = new int[3][]; j[2][0] = 12; } }
? public class TestGetSum { public static void main(String[] args){ int[][] m = new int[][]{{3,8,2},{2,7},{9,0,1,6}}; int sum = 0; for (int i = 0;i < m.length;i ){ for(int j = 0;j < m[i].length;j ){ System.out.print(m[i][j] "\t"); sum = m[i][j]; } System.out.println(); } System.out.println("總和為:" sum); } } ? ? ? public class TestYangHui { public static void main(String[] args){ int[][] yangHui = new int[10][]; //1.初始化二維數(shù)組 for(int i = 0;i < yangHui.length;i ){ yangHui[i] = new int[i 1]; } //2.顯示的為二維數(shù)組的每個元素賦值 for(int i = 0;i < yangHui.length;i ){ for(int j = 0;j < yangHui[i].length;j ){ yangHui[i][0] = yangHui[i][i] = 1; if (i > 1 && j > 0 && j < i){ yangHui[i][j] = yangHui[i - 1][j] yangHui[i - 1][j - 1]; } } } //遍歷二維數(shù)組 for(int i = 0;i < yangHui.length;i ){ for(int j = 0; j < yangHui[i].length;j ){ System.out.print(yangHui[i][j] "\t"); } System.out.println(); } } } ? class Test{ public static void main(String[] args){ int[] array1, array2; array1 = new int[]{2,3,5,7,11,13,17,19}; //遍歷array1 for(int i = 0; i < array1.length;i ){ System.out.println(array1[i] "\t"); } System.out.println(); array2 = array1; //這樣子賦值,修改array2的內(nèi)容,,array1也會改變,。 //修改array2 for (int i = 0;i < array2.length;i ){ if(i % 2 == 0){ array2[i] = i; } } //遍歷array1 for(int i = 0;i < array1.length;i ){ System.out.print(array1[i] "\t"); } } } ? ?API,,數(shù)組工具類API:應用程序編程接口,俗稱“幫助文檔” java.util.Arrays:數(shù)組工具類 此類包含用來操作數(shù)組(比如排序和搜索)的各種方法,。 (1)int binarySearch(int[] a, int key) a - 要搜索的數(shù)組 key - 要搜索的值 結果:如果它(key)包含在數(shù)組(a)中,,則返回搜索鍵的索引;否則返回 (-(插入點) - 1),。 插入點:被定義為將鍵(key)插入數(shù)組(a)的那一點 二分查找的前提:數(shù)組必須是有序的 (2)void sort(int[] a) :對指定的 int 型數(shù)組按數(shù)字升序進行排序,。 (3)int[] copyOf(int[] original, int newLength) 復制指定的數(shù)組,截取或用 0 填充(如有必要),,以使副本具有指定的長度,。 original - 要復制的數(shù)組,源數(shù)組 newLength - 要返回的副本的長度 結果:原數(shù)組的副本,,截取或用 0 填充以獲得指定的長度 (4)int[] copyOfRange(int[] original, int from, int to) original - 將要從其復制一個范圍的數(shù)組,,源數(shù)組 from - 要復制的范圍的初始索引(包括) to - 要復制的范圍的最后索引(不包括)。(此索引可以位于數(shù)組范圍之外),。 結果:original數(shù)組的[from,to) (5) void fill(int[] a, int val) 將指定的 int 值分配給指定 int 型數(shù)組的每個元素,。 a - 要填充的數(shù)組 val - 要存儲在數(shù)組所有元素中的值 (6)String toString(int[] a) 返回指定數(shù)組內(nèi)容的字符串表示形式。字符串表示形式由數(shù)組的元素列表組成,,括在方括號("[]")中,。 相鄰元素用字符 ", "(逗號加空格)分隔。 a - 返回其字符串表示形式的數(shù)組 結果:a 的字符串表示形式,,是一個字符串 .... class TestApi{ public static void main(String[] args){ //java.util.Scanner //1.找下標 int[] arr = {8,2,0,4,5,1,6,9,3}; int find = 5; int index = java.util.Arrays.binarySearch(arr,find); //因為這個工具的binarySearch方法會返回一個結果,,所以我要用一個變量接收這個結果 System.out.println("index=" index); //2.排序,從小到大 java.util.Arrays.sort(arr); for(int i = 0;i < arr.length; i ){ System.out.print(arr[i] "\t"); } //3.復制一個和原來長度一模一樣的數(shù)組,兩倍長就是arr.length * 2 //int[] xin = java.util.Arrays.copyOf(arr, arr.length); //復制數(shù)組前3個,; //int[] xin = java.util.Arrays.copyOf(arr, 3); //要復制arr數(shù)組,,但是我想要從arr[2]復制到arr[5], //int[] xin = java.util.Arrays.copyOfRange(arr,3,5 1); //要復制arr數(shù)組,但是我想要從arr[2]開始到最后,,并且新數(shù)組的長度是10 //假設原數(shù)組夠長,,新數(shù)組的長度要10,從[2]~[11],,但是11不包含,,所以寫12 //int[] xin = java.util.Arrays.copyOfRange(arr, 2, 12); //4.填充 int[] arr1 = new int[10];//用3填充數(shù)組arr //java.util.Arrays.fill(arr1, 3); java.util.Arrays.fill(arr1, (int)(Math.random()*100)); for(int num : arr1){ System.out.print(num "\t"); } String str = java.util.Arrays.toString(arr); System.out.println(str); } } ? 來源:http://www./content-1-84051.html |
|