本篇概述==> 數組(依舊只敘述與C++不同的地方,或者一些應用方法例子,畢竟語言是共通的,多了也是廢話.jpg) 一,如果創建一維數組,二維數組,以及 N維數組(以此類推)呢 二,數組的一些方法(排序,複製.......) 1. 增強型 For 迴圈 用來取值,不能修改數組裡的值,相當於 普通 f ...
本篇概述==>
數組(依舊只敘述與C++不同的地方,或者一些應用方法例子,畢竟語言是共通的,多了也是廢話.jpg)
一,如果創建一維數組,二維數組,以及 N維數組(以此類推)呢 =-=
1 // 一維數組創建方法 2 int [] list = new int[]; 3 4 // 一維數組初始化方法 5 int a[] = new int[]{1, 2, 3}; 6 7 // 二維數組創建方法 8 int [][] list = new int[n][]; // 一維上必須標明長度,和C++語法一樣 9 10 // 二維數組初始化方法 11 int a[][] = new int [][]{ 12 {1, 2, 3}, 13 {2, 3, 4} 14 }
二,數組的一些方法(排序,複製.......)
1. 增強型 For 迴圈
用來取值,不能修改數組裡的值,相當於 普通 for 迴圈取值的 簡便方法
// 增強型for迴圈只能用來取值,不能用來修改數組裡的值 int values [] = new int[]{18,62,68,82,65,9}; // 增強 int temp = values[0]; for (int each : values) { if (temp < each) temp = each; } System.out.println("最大:" + temp);
2. 數組的複製
一個數組的長度是不可變的,一旦分配好空間,是多長就多長,不能改變
而把一個數組的值,複製到另外一個數組上去,相對簡單的方法就是通過System.arraycopy() 方法
如果是通過 for 迴圈一個個進行賦值不免繁瑣了點 =-=,下麵是通過該方法的代碼示例
1 int a [] = new int[]{18,62,68,82,65,9}; 2 int b[] = new int[3];//分配了長度是3的空間,但是沒有賦值 3 //通過數組賦值把,a數組的前3位賦值到b數組 4 // System.arraycopy(src, srcPos, dest, desPos, length) 5 // src 源數組 6 // srcPos 從源數組複製數據的起始位置 7 // dest 目標數組 8 // destPos 複製目標數組的啟始位置 9 // 複製的長度 10 System.arraycopy(a, 0, b, 0, 3);View Code
還有一個相對這個方法參數更少的方法,就是利用 Arrays工具的 copyOfRange() 方法
1 import java.util.Arrays; 2 3 public class HelloWorld { 4 public static void main(String[] args) { 5 int a[] = new int[] { 18, 62, 68, 82, 65, 9 }; 6 7 // copyOfRange(int[] original, int from, int to) 8 // 第一個參數表示源數組 9 // 第二個參數表示開始位置(取得到) 10 // 第三個參數表示結束位置(取不到) 11 int[] b = Arrays.copyOfRange(a, 0, 3); 12 13 for (int i = 0; i < b.length; i++) { 14 System.out.print(b[i] + " "); 15 } 16 17 } 18 }View Code
3. 數組的排序
3.1 非方法,通過 for 迴圈來進行繁瑣排序(涉及 選擇法 和 冒泡法 ,C++中有講)
直白點說,選擇法就是每一次for迴圈,通過一個和全部比較,將最小的那隻放數組前面,以此類推,從小到大
冒泡法就是每一次for迴圈,通過左右兩邊比較,將最大的一點點往後面移,從而達到從小到大的效果
以下是一個兩個方法結合的例子(~~)
1 // 冒泡和 選擇 倒序 正序 四合一 2 import java.util.Scanner; 3 public class Twenty_Three_sort { 4 public static void main(String[] args) { 5 System.out.println("請輸入該數組的長度"); 6 Scanner scanner = new Scanner(System.in); 7 int n = scanner.nextInt(); 8 int [] list = new int[n]; 9 for (int i = 0; i < list.length; i++) 10 { 11 list[i] = (int)(Math.random()*100); 12 System.out.println("list["+ i +"] = " + list[i]); 13 } 14 System.out.println("請選擇排序方式(倒序/正序)"); 15 String tab = scanner.nextLine(); 16 String select = scanner.nextLine(); 17 switch(select) 18 { 19 case "倒序":{ 20 System.out.println("請選擇排序方法(冒泡法 / 選擇法):"); 21 String option = scanner.nextLine(); 22 switch (option){ 23 case "選擇法": 24 { 25 for (int i = 0; i < list.length - 1; i++) 26 { 27 for (int j = i + 1; j < list.length; j++) 28 { 29 if (list[j] > list[i]) 30 { 31 int temp = list[i]; 32 list[i] = list[j]; 33 list[j] = temp; 34 } 35 } 36 } 37 break; 38 } 39 case "冒泡法": 40 { 41 for (int i = 0; i < list.length; i++) 42 { 43 for (int j = 0; j < list.length - i -1; j++) { 44 if (list[j] < list[j+1]) 45 { 46 int temp = list[j+1]; 47 list[j+1] = list[j]; 48 list[j] = temp; 49 } 50 } 51 } 52 break; 53 } 54 } 55 break; 56 } 57 case "正序": { 58 System.out.println("請選擇排序方法(冒泡法 / 選擇法):"); 59 String option = scanner.nextLine(); 60 switch (option){ 61 case "選擇法": 62 { 63 for (int i = 0; i < list.length - 1; i++) 64 { 65 for (int j = i + 1; j < list.length; j++) 66 { 67 if (list[j] < list[i]) 68 { 69 int temp = list[i]; 70 list[i] = list[j]; 71 list[j] = temp; 72 } 73 } 74 } 75 break; 76 } 77 case "冒泡法": 78 { 79 for (int i = 0; i < list.length; i++) 80 { 81 for (int j = 0; j < list.length - i -1; j++) { 82 if (list[j] > list[j+1]) 83 { 84 int temp = list[j+1]; 85 list[j+1] = list[j]; 86 list[j] = temp; 87 } 88 } 89 } 90 break; 91 } 92 } 93 break; 94 } 95 } 96 System.out.println("-------------------------------------"); 97 for (int i = 0; i < list.length; i++) 98 { 99 System.out.println("list["+ i +"] = " + list[i]); 100 } 101 } 102 }View Code
3.2 方法
利用 Arrays.sort() 方法 一步到位
1 int a[] = new int[] { 18, 62, 68, 82, 65, 9 }; 2 Arrays.sort(a)
3.3 轉換為字元串
利用 Arrays.toString()方法
1 int []b = Arrays.copyOfRange(a, 0, 3); 2 // 轉換為字元串 3 //是Arrays提供了一個toString()方法,直接把一個數組,轉換為字元串,這樣方便觀察數組的內容 4 String content = Arrays.toString(a);
3.4 搜索
查詢元素出現的位置,需要註意的是,使用binarySearch進行查找之前,必須使用sort進行排序
如果數組中有多個相同的元素,查找結果是不確定的
System.out.println("62出現的位置" + Arrays.binarySearch(a, 62));
3.5 判斷兩個數組的內容是否相同(返回 bolean類型)
1 // 比較兩個數組的元素是否相同 2 Arrays.equals(a, b);
3.6 填充數組
使用同一個值,填充整個數組
1 int a[] = new int[10]; 2 3 Arrays.fill(a, 5);
一個例子,將二維數組排序
1 import java.util.Arrays; 2 import java.util.Scanner; 3 public class Thirty_pratice_sort_double_dimensional_Array { 4 public static void main(String[] args) { 5 Scanner scanner = new Scanner(System.in); 6 System.out.println("請輸入二維數組的行數: "); 7 int n1 = scanner.nextInt(); 8 System.out.println("請輸入二維數組的列數: "); 9 int n2 = scanner.nextInt(); 10 int[][] a = new int[n1][n2]; 11 for (int i = 0; i < n1; i++) 12 { 13 for (int j = 0; j < n2; j++) 14 { 15 a[i][j] = (int)(Math.random()*100); 16 System.out.print("\t a["+i+"]["+j+"] = "+a[i][j] + "\t"); 17 } 18 System.out.print("\n"); 19 } 20 int [] array = new int[n1*n2]; 21 for (int i = 0; i < a.length; i++) 22 { 23 System.arraycopy(a[i], 0, array, a[i].length*i, a[i].length); // 將二維數組複製到一維數組上 24 } 25 Arrays.sort(array); 26 for (int i = 0; i < a.length; i++) 27 { 28 System.arraycopy(array, a.length*i, a[i], 0, a[i].length); // 將一維數組還原到二維數組上 29 } 30 31 System.out.println("排序後:"); 32 for (int i = 0; i < n1; i++) 33 { 34 for (int j = 0; j < n2; j++) 35 { 36 System.out.print("\t a["+i+"]["+j+"] = "+a[i][j] + "\t"); 37 } 38 System.out.print("\n"); 39 } 40 } 41 } 42 43 // 結果 44 請輸入二維數組的行數: 45 5 46 請輸入二維數組的列數: 47 6 48 a[0][0] = 50 a[0][1] = 42 a[0][2] = 94 a[0][3] = 65 a[0][4] = 31 a[0][5] = 28 49 a[1][0] = 95 a[1][1] = 37 a[1][2] = 59 a[1][3] = 82 a[1][4] = 85 a[1][5] = 34 50 a[2][0] = 30 a[2][1] = 2 a[2][2] = 63 a[2][3] = 83 a[2][4] = 99 a[2][5] = 64 51 a[3][0] = 31 a[3][1] = 56 a[3][2] = 56 a[3][3] = 4 a[3][4] = 4 a[3][5] = 3 52 a[4][0] = 99 a[4][1] = 61 a[4][2] = 83 a[4][3] = 13 a[4][4] = 94 a[4][5] = 41 53 排序後: 54 a[0][0] = 2 a[0][1] = 3 a[0][2] = 4 a[0][3] = 4 a[0][4] = 13 a[0][5] = 28 55 a[1][0] = 28 a[1][1] = 30 a[1][2] = 31 a[1][3] = 31 a[1][4] = 34 a[1][5] = 37 56 a[2][0] = 37 a[2][1] = 41 a[2][2] = 42 a[2][3] = 50 a[2][4] = 56 a[2][5] = 56 57 a[3][0] = 56 a[3][1] = 59 a[3][2] = 61 a[3][3] = 63 a[3][4] = 64 a[3][5] = 65 58 a[4][0] = 65 a[4][1] = 82 a[4][2] = 83 a[4][3] = 83 a[4][4] = 85 a[4][5] = 94 59 請輸入二維數組的行數: 60 5 61 請輸入二維數組的列數: 62 6 63 a[0][0] = 50 a[0][1] = 42 a[0][2] = 94 a[0][3] = 65 a[0][4] = 31 a[0][5] = 28 64 a[1][0] = 95 a[1][1] = 37 a[1][2] = 59 a[1][3] = 82 a[1][4] = 85 a[1][5] = 34 65 a[2][0] = 30 a[2][1] = 2 a[2][2] = 63 a[2][3] = 83 a[2][4] = 99 a[2][5] = 64 66 a[3][0] = 31 a[3][1] = 56 a[3][2] = 56 a[3][3] = 4 a[3][4] = 4 a[3][5] = 3 67 a[4][0] = 99 a[4][1] = 61 a[4][2] = 83 a[4][3] = 13 a[4][4] = 94 a[4][5] = 41 68 排序後: 69 a[0][0] = 2 a[0][1] = 3 a[0][2] = 4 a[0][3] = 4 a[0][4] = 13 a[0][5] = 28 70 a[1][0] = 28 a[1][1] = 30 a[1][2] = 31 a[1][3] = 31 a[1][4] = 34 a[1][5] = 37 71 a[2][0] = 37 a[2][1] = 41 a[2][2] = 42 a[2][3] = 50 a[2][4] = 56 a[2][5] = 56 72 a[3][0] = 56 a[3][1] = 59 a[3][2] = 61 a[3][3] = 63 a[3][4] = 64 a[3][5] = 65 73 a[4][0] = 65 a[4][1] = 82 a[4][2] = 83 a[4][3] = 83 a[4][4] = 85 a[4][5] = 94View Code
補充:利用隨機數,填充數組(涉及 隨機數的獲取方法)
Math.random() 方法只能獲取 0~1之間的隨機值,則為了 獲取 0 - 100 之間的整數,其方法為
1 int n = (int)(Math.random()*100);