一. 数组
存储同一种数据类型多个变量元素
数组的定义格式:
- 数据类型[] 数组名;
- 数组类型 数组名[]
- 这两种定义做完了,数组中没有元素值
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;
}