一. 數組
存儲同一種數據類型多個變量元素
數組的定義格式:
- 數據類型[] 數組名;
- 數組類型 數組名[]
- 這兩種定義做完了,數組中沒有元素值
Int[ ] a;定義一個int類型的數組a變量;
Int a [ ];定義一個int類型的a數組變量;
數組必須先初始化,爲其分配內存空間併爲其分配內存空間
(1)動態初始化:初始化時只指定數組長度,由系統爲數組分配初始值
格式:
數組類型[] 數組名=new 數據類型 [數組長度]
數組長度其實就是數組元素的個數
(2)靜態初始化:
格式:
數組類型[ ] 數組名=new 數據類型[] (元素1,元素2……)
舉例1.:int [ ]arr=new int[1,2,3]
定義了一個int類型數組,,這個數組可存放3個int 類型值,值分別爲1,2,3;
初始化時指定每個數組元素的初始值,由系統決定數組長度;
用數組名和編號的配合就可以獲取數組中的指定編號的元素,這個編號的專業名稱爲索引;
通過數組名訪問數據的格式是:數組名[索引],索引就是每個元素編號,從0開始,最大是數組長度-1;
import java.util.Scanner;
public class One {
public static void main(String[] args) {
int [] arr=new int[3];
//int 數組中元素類型爲int
//arr數組名稱
//new爲數組分配內存空間
///3:數組長度
System.out.println(arr);//[I@15db9742地址值
}
}
二.堆,棧
1.棧:存放局部變量
數據用完就釋放
堆:存放所有new出來的東西
堆內存特點:
1.每一個new 出來的東西都有地址值;
2.每個變量都有默認值,byte,short,int,long 0
Float,double —0.0
Char —‘ \u0000’
Boolean— false
引用類型 —null
3.使用完就變成垃圾,但沒有立刻回收,會在垃圾回收器空閒時回收
局部變量:在方法定義中或者方法聲明上的變量都稱爲局部變量
int [] arr=new int[2];
int [] arr2=new int[3];
arr[1]=20;
arr2[1]=30;
arr2[0]=40;
System.out.println(arr);//[I@15db9742地址值
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println("--------------------");
System.out.println(arr);//[I@15db9742地址值
System.out.println(arr2[0]);
System.out.println(arr2[1]);
System.out.println(arr2[2]);
}
沒有數字的即爲它在堆內存的地址值
2.數組的定義
定義第一個數組,定義完畢後,給數組元素賦值,賦值完畢後,再輸出數組名稱和元素;
定義第二個數組,定義完畢後,給數組元素賦值,賦值完畢後,再輸出數組名稱和元素;
定義第三個數組,把第一個數組的地址值賦值給他,通過第三個數組的名稱取把元素重複賦值,最後,再次輸出第一個數組數組名和元素。
(1)靜態初始化:
import java.util.Scanner;
public class One {
public static void main(String[] args) {
int [] arr= {1,2,3};
arr[1]=20;
arr[2]=30;
arr[0]=50;
System.out.println(arr);//[I@15db9742地址值
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
System.out.println("--------------------");
}
}
注意:
(1)ArrayIndexOutOfBoundsException:數組索引越界異常,訪問了不存在的索引;
(2)NullPointerException:空指針異常,數組已經不再指向堆內存了,而你還用數組名去訪問元素。
(3) 數組提供了一個屬性,用於獲取數組長度
格式:數組名.length
舉例1.數組遍歷
import java.util.Scanner;
public class One {
public static void main(String[] args) {
//定義數據
int [ ] arr= {1,2,3,4,5};
//獲取每一個元素
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
System.out.println(arr[3]);
System.out.println(arr[4]);
System.out.println("-----------------------");
for (int x=0;x<arr.lengt;x++) {
System.out.println(arr[x]);
}
}
}
舉例2.數組獲取最大值
(1)定義數組,進行靜態初始化;
(2)找參照物,數組中任意元素作爲參照物,默認最大值
遍歷其他元素
方法一:
import java.util.Scanner;
public class One {
public static void main(String[] args) {
//定義數據
int [] arr= {1,2,3,4,5};
int max=arr[0];
for (int x=1;x<arr.length;x++) {
if (arr[x]>max) {
max=arr[x];
}
}
System.out.println(max);
}
}
方法二:
import java.util.Scanner;
public class One {
public static void main(String[] args) {
int [] arr= {1,2,3,4,5};
int max=getMax(arr);
System.out.println(max);
}
public static int getMax(int[] arr){
int max=arr[0] ;
for (int x=1;x<arr.length;x++) {
if (arr[x]>max) {
max=arr[x];
}
}
return max;
}
}
舉例3.數組元素逆序
import java.util.Scanner;
public class One {
public static void main(String[] args) {
int [] arr= {12,23,32,48,56};
System.out.println("逆序前");
printArray(arr);
reverse(arr);
System.out.println("逆序後");
printArray(arr);
}
public static void reverse(int [] arr) {
for(int x=0;x<arr.length/2;x++) {
int temp=arr[x];
arr[x]=arr[arr.length-1-x];
arr[arr.length-1-x]=temp;
}
}
//遍歷數組
public static void printArray(int [] arr) {
System.out.println("[");
for(int x=0;x<arr.length;x++) {
if(x==arr.length-1) {
System.out.println(arr[x]+"]");
}else {
System.out.print(arr[x]+",");
}
}
}
}
舉例4.數組查表法,根據鍵盤錄入索引,查找對應星期
import java.util.Scanner;
public class One {
public static void main(String[] args) {
String[] strArray= {"1","2","3","4","5","6","7"};
Scanner sc=new Scanner(System.in);
System.out.println("請輸入一個數0-6");
int index=sc.nextInt();
System.out.println("你要查找的日期是"+strArray[index]);
}
舉例5.數組元素查找
需求:查找指定數據再數組中第一次出現的索引
定義一個數組,並靜態初始化
參數列表:兩個
寫一個功能實現。
import java.util.Scanner;
public class One {
public static void main(String[] args) {
int [] arr= {12,23,34,45,67};
int index=getIndex(arr,23);
System.out.println("出現第一次索引爲"+index);
}
public static int getIndex(int [] arr,int value) {
for(int x=0;x<arr.length;x++) {
if (arr[x]==value) {
return x;
}
}
//假如我要查的數據數組中不存在,那就找不到,
//找不到有對應的返回嗎
//只要是判斷,就有可能是false
//如果找不到數據,我們一般返回一個負數即可,而且返回是1
return -1;
}
}
方法2.
public static void main(String[] args) {
int [] arr= {12,23,34,45,67};
int index=getIndex(arr,23);
System.out.println("出現第一次索引爲"+index);
}
public static int getIndex(int [] arr,int value) {
int index=-1;
for(int x=0;x<arr.length;x++) {
if (arr[x]==value) {
index=x;
break;
}
}
return index;
}