1. 程式人生 > 其它 >java基礎5 + 陣列

java基礎5 + 陣列

陣列

1.main方法中的陣列
//String[] args陣列:String型別的陣列  args 陣列名字。  [[email protected]  (前面有[ 代表此物件為陣列型別)
  System.out.println(args);
2.是誰呼叫了main方法:jvm
3.陣列:
  //length:檢視陣列的長度
  //預設為一個長度為0的陣列
  System.out.println(args.length);
  //如果通過命令執行程式
  //javac
  //java -cp path com.briuo.day6.am.ArrTest 10 20 30   -cp:jvm命令  -d  (指定CLASSPATH)
//在呼叫主方法時 將10 20 30放到main方法String陣列中 此時args陣列長度為3 //如果args這個陣列中有資料我們可以取出來並使用 //迴圈 1.5新特性 增強for迴圈 /* *for(資料型別 變數名:容器){ //從容器中取出資料交給變數名 * System.out.println(變數名); *} */ program arguments(程式引數) VM arguments(jvm引數 -cp -d) 4.//自己宣告一個數組 //陣列宣告的語法: 宣告一個 陣列變數 // 資料型別[] 陣列名 // 資料型別 陣列名字[]
//宣告一個數組不等於建立一個數組; //Action[] 類陣列 裡面存放 Action物件 int[][] 二維陣列

陣列變數

1.先使用一個已有的型別,然後加上中括號,組合成一個數組型別,然後再宣告這個陣列型別的變數
  //1.int[] a;   2.int a[]
  //main方法也可以寫為  public static void main(String args[])  
  //陣列宣告的語法: 宣告一個 陣列變數
  //       資料型別[] 陣列名
  //       資料型別 陣列名字[]
  //宣告一個數組不等於建立一個數組;

陣列物件

1.陣列物件,在記憶體中,就是一塊連續的記憶體空間,在這個連續的空間中,可以存放多個型別相同的資料。
2.
陣列物件中只有一個屬性(length),表示陣列的長度。 3.陣列物件中的方法,只有從父型別Object中繼承過來的方法。 4.除此之外,陣列物件中就沒有其他屬性和方法了。 //陣列的宣告 建立 初始化 以及使用 public class Arr{ public static void main(String[] args){ //宣告一個數組int型別 //建立一個長度為6的陣列 /* *語法: * 資料型別[] 陣列名; * 陣列名 = 呢哇資料型別[長度]; * 資料型別[] 陣列名 = new 資料型別[長度]; */ //陣列構建成功後陣列內部的每個位置都是有資料的 jvm會在構建陣列時會根據資料型別給一個初始值 //基本資料型別 //引用資料型別: null int[] arr; arr = new int[6]; //往下標為0位置設定一個數據 arr[0] = 100 int[] arr1 = new int[6]; //獲取arr1陣列中的全部的資料 for(int index = 0; index < arr1.length; index++){ System.out.println(arr1[index]); } //增強for for(int number : arr1){ System.out.println(number); } } }

陣列長度

陣列物件的長度:
1. 陣列長度,是指在一個數組物件中,最多可以存放多少個同一型別的資料
2. 陣列長度,必須在建立陣列物件的時候就明確指定
3. 陣列長度,一旦確定,就無法再改變
4. 陣列長度,可以為0,但是不能為負數

陣列下標

1.陣列的下標的區間為,[0,arr.length-1],假如陣列的長度為length的話,那麼陣列下標的最小值為0,陣列下標的最大值就是length-1
2.如果使用下標訪問陣列中元素的時候,下標的值超出了其可用範圍,那麼執行就會報錯:
  報錯:ArrayIndexOutofBoundsException
  //陣列長度一旦確定 不可修改

建立方式

//構建陣列的多種方式 構建陣列的方式不同,但是陣列構建完成後  使用沒有區別
1.先宣告 然後建立 在初始化 使用
  //宣告並初始化
  int[] arr = new int[3];
  //初始化
  arr[0] = 1;
  arr[1] = 2;
  arr[2] = 3;
  //宣告
  int[] arr1;
  //構建陣列
  arr1 = new int[3];
  //初始化
  arr[0] = 1;
  arr[1] = 2;
  arr[2] = 3;
2.先宣告 建立 初始化 一步完成
  /*
  * 資料型別[] 陣列名 = new 資料型別[] {var1,var2...};
  * 資料型別[] 陣列名;
  * 陣列名 = new 資料型別[]{var1,var2.....};
  */
  char[] ch = new char[]{'a','b','c'};
  char[] ch1;
  ch1 = new char[]{'e','f','g'};  
3.//陣列宣告構建初始化的簡寫方式
  /*
  *必須將宣告建立初始化放在一起  否則就報錯
  *資料型別[] 陣列名={var1,var2...};
  */
  String[] str = {"Hello","World","lidb"};

陣列的拷貝

//陣列拷貝  System.arraycopy()
public class Arr{
	//需求  將陣列長度擴充套件至原來的兩倍  相當於 Arrays.copyOf
	public int[] addArray(int[] arr){
		//獲取傳遞過來的陣列的長度
		//並且以這個長度的2倍構建新陣列
		int[] arrNew = new int[arr.length*2];
		//把元素組中的內容複製到新陣列中
		System.arraycopy(arr,0,arrNew,0,arrNew.length);
		//把新陣列返回
		return arrNew;
	}
	public static void main(String args[]){
		//需求  將陣列長度擴充套件至原來的兩倍
		//原有陣列
		int[] arr = {1,2,3};
		Arr a = new Arr();
		//這個方法完成後會有一個新陣列
		int[] arrNew = a.addArray(arr);
		//讓原有資料的引用指向新陣列
		arr = arrNew;
	}
}

陣列工具類

//陣列輔助類 Arrays
//這個類不能構建物件  所有的方法都是靜態方法
int[] arr = {1,5,2,3,6,7,9};
//排序sort
Arrays.sort(arr);
System.out.println(arr);
//arr轉換成字串打印出來
String str = Arrays.toString(arr);
System.out.println(str);
//查詢資料在陣列中的位置(排好序)
int index = Arrays.binarySearch(arr,6);
System.out.println(index);
//陣列的複製 Arrays.copyOf(原陣列,目標陣列的長度)
int arrNew = Arrays.copyOf(arr,arr.length)
System.out.println(Arrays.toString(arrNew));
//複製指定範圍   Arrays.copyOfRange(原陣列,從指定下標(包含),指定位置(不包含))
int[] arrNew1 = Arrays.copyOfRange(arr,1,3);  //[1,3)
for(int num:arrNew1){
	System.out.println(num);
}
//填充
Arrays.fill(arr,10);   //對原陣列內部進行填充  陣列內部全是 10

1.
//求一組資料中的最大值
public class ArrEx{
	//需求:一組資料(最大值)
	public void maxValue(int[] arr){
		//思路  假設有一個最大值(第一個元素為最大值,取陣列中存在的一個數)
		int maxValue = arr[0];
		//定義一個最大值所在的位置
		int naxIndex = 0;
		for(int i = 0; i < arr.length;i++){
			if(maxValue<arr[i]){
				maxValue = arr[i];
				maxIndex = i;
			}
		}
		System.out.println("最大值為:" + maxValue);
		System.out.println("最大值的位置:" + maxIndex);
	}
}

2.
//生成4位的隨機數
//(隨機數中要出現字母數字組合)
public class ArrEx1{
	//生成隨機數的方法
	/*
	* 0-9 a-z A-z arr1 = {A-Z,a-z} 3個字元
	*1.先找一個數組 把 z-a A-Z 儲存起來 [0,51]
	*2.陣列0-9儲存 [0,9] 
	*/
	public static void randCode(){
		//生成一個數組 a-f
		String str = "abcdef";
		//將字串轉成字元陣列
		char[] arr1 = str.toCharArray();
		//生成一個數組[0,9]
		str = "0123456789";
		char[] arr2 = str.toCharArray();
		//生成隨機數 把這個隨機數當作下標去陣列中對應位置的資料[0,5] 3個
		int index1 = (int)Math.random()*6; //[0.1) 6
		int index2 = (int)Math.random()*6; //[0.1) 6
		int index3 = (int)Math.random()*6; //[0.1) 6
		//[0.9)
		int index4 = (int)Math.random()*6; //[0.1) 6
		String code = "" + arr1[index1] + arr1[index2] + arr1[index3] + arr2[index4];
		System.out.println(code);
	}
	public static void main(String[] args){
		ArrEx1.randCode();
	}
}

3.
//對陣列做排序
//氣泡排序
  
//選擇排序
//插入排序
public class ArrEx3{
	//氣泡排序  
	/*
	* int[] arr = {5,1,2,9,1};
	* 第一輪:
	*    1 5 2 9 1
	*    1 2 5 9 1
	*    1 2 5 9 1
	*    1 2 5 1 9
	* for(int i = 0; i < arr.length - 1 -0; i++){
	* 	if(arr[i] > arr[i + 1]){
	* 		//資料交換的方式 三種(中間量  異或)
	* 		int temp = arr[i];
	* 		arr[i] = arr[i+1];
	*  		arr[i+1] = temp;
	* 	}
	* }
	* 第二輪:
	*    1 2 5 1   9
	*    1 2 5 1   9
	*    1 2 1 5   9 
	* for(int i = 0; i < arr.length -1 -1;i++){
	* 		if(arr[i] > arr[i + 1]){
	* 		//資料交換的方式 三種(中間量  異或)
	* 		int temp = arr[i];
	* 		arr[i] = arr[i+1];
	*  		arr[i+1] = temp;
	* 	}
	* }
	* 第三輪:
	*    1 2 1   5   9
	*    1 1 2   5   9 
	* for(int i = 0; i < arr.length -1 -2;i++){
	* 		if(arr[i] > arr[i + 1]){
	* 		//資料交換的方式 三種(中間量  異或)
	* 		int temp = arr[i];
	* 		arr[i] = arr[i+1];
	*  		arr[i+1] = temp;
	* 	}
	* }
	* 第四輪:
	*    1 1   2   5   9 
	* for(int i = 0; i < arr.length -1 -3;i++){
	* 		if(arr[i] > arr[i + 1]){
	* 		//資料交換的方式 三種(中間量  異或)
	* 		int temp = arr[i];
	* 		arr[i] = arr[i+1];
	*  		arr[i+1] = temp;
	* 	}
	* }
	* //輪數 : 
	* for(int j = 0; j < arr.length-1; j++){
	* 	for(int i = 0; i < arr.length-1-j;i++){
	* 		if(arr[i] > arr[i + 1]){
	* 		//資料交換的方式 三種(中間量  異或)
	* 		int temp = arr[i];
	* 		arr[i] = arr[i+1];
	*  		arr[i+1] = temp;
	* 	   }
	*    }
	* }
	*/

	public void maoPao(int[] arr){
		for(int j = 0; j < arr.length-1; j++){
	 		for(int i = 0; i < arr.length-1-j;i++){
				if(arr[i] > arr[i + 1]){
	 			//資料交換的方式 三種(中間量  異或)
				int temp = arr[i];
	 			arr[i] = arr[i+1];
	  			arr[i+1] = temp;
	 	       }
	        }
	    }
	    System.out.println(Arrays.toString(arr))
	}
	
	//使用選擇排序從大到小
	/*
	* int[] arr = {5,1,2,9,1};
	* 第一輪:[0,4]選出最大的數  以及最大數的位置
	* int maxVal = arr[0];
	* int maxIndex = 0;
	* for(int i = 0; i < arr.length; i ++){
	* 	if(maxVal < arr[i]){
	* 		//交換資料
	* 		maxVal = arr[i];
	* 		//最大位置
	* 		maxIndex = i;
	* 	}
	* }
	* 
	* //把最大位置的數 arr[maxIndex] arr[0]
	* int temp = arr[0];
	* arr[0] = arr[maxIndex];
	* arr[maxIndex] = temp;
	*
	*
	* 第二輪:[1,4]找出最大值 跟第一個位置交換
	* int maxVal = arr[1];
	* int maxIndex = 1;
	* for(int i = 1; i < arr.length; i ++){
	* 	if(maxVal < arr[i]){
	* 		//交換資料
	* 		maxVal = arr[i];
	* 		//最大位置
	* 		maxIndex = i;
	* 	}
	* }
	* 
	* //把最大位置的數 arr[maxIndex] arr[1]
	* int temp = arr[1];
	* arr[1] = arr[maxIndex];
	* arr[maxIndex] = temp;
	* 
	* 
	* 第三輪[2,4]找出最大值 跟第2個位置交換
	* int maxVal = arr[2];
	* int maxIndex = 2;
	* for(int i = 2; i < arr.length; i ++){
	* 	if(maxVal < arr[i]){
	* 		//交換資料
	* 		maxVal = arr[i];
	* 		//最大位置
	* 		maxIndex = i;
	* 	}
	* }
	* 
	* //把最大位置的數 arr[maxIndex] arr[2]
	* int temp = arr[2];
	* arr[2] = arr[maxIndex];
	* arr[maxIndex] = temp;
	* 
	* 第四輪 
	* int maxVal = arr[3];
	* int maxIndex = 3;
	* for(int i = 3; i < arr.length; i ++){
	* 	if(maxVal < arr[i]){
	* 		//交換資料
	* 		maxVal = arr[i];
	* 		//最大位置
	* 		maxIndex = i;
	* 	}
	* }
	* 
	* //把最大位置的數 arr[maxIndex] arr[3]
	* int temp = arr[3];
	* arr[3] = arr[maxIndex];
	* arr[maxIndex] = temp;
	*
	*
	* 輪數: 輪數 = 陣列長度-1
	* for(int j = 0; j < arr.length-1; j++){
	* 	int maxVal = arr[j];
	* 	int maxIndex = j;
	* 	for(int i = j; i < arr.length; i ++){
	* 		if(maxVal < arr[i]){
	* 			//交換資料
	* 			maxVal = arr[i];
	* 			//最大位置
	* 			maxIndex = i;
	* 		}
	*	 }
	* 
	* 	//把最大位置的數 arr[maxIndex] arr[j]
	* 	int temp = arr[j];
	* 	arr[j] = arr[maxIndex];
	* 	arr[maxIndex] = temp;
	* }
	*/
	public static void xuazhe(int[] arr){
		for(int j = 0; j < arr.length-1; j++){
	 		int maxVal = arr[j];
 	    	int maxIndex = j;
	 		for(int i = j; i < arr.length; i ++){
	 			if(maxVal < arr[i]){
	 				//交換資料
	 				maxVal = arr[i];
	 				//最大位置
	 				maxIndex = i;
	 			}
		 	}
	 
	 		//把最大位置的數 arr[maxIndex] arr[j]
	 		int temp = arr[j];
	 		arr[j] = arr[maxIndex];
	 		arr[maxIndex] = temp;
	 	}
	}
}