1. 数组
---1,概念
存储一组数据类型相同的数据.
名词:
【下标:又名索引,数据在数组中的位置,从0开始】
【长度:数组可容纳数据的个数----数组的长度不可变】
【元素:数组中的数据】
---2,声明
语法:
数据类型[ ] 数组名;
或
数据类型 数组名[ ];【不建议使用】
---3,创建
语法1---动态:
数组名 = new 数据类型[ 数组长度 ];
或
数组名 = new 数据类型[ ]{ 值1,值2,....};
【特殊情况:声明并创建】
语法2:
数据类型[ ] 数组名 = new 数据类型[ ]{ 值1,值2,....};
或
数据类型[ ] 数组名 = new 数据类型[ 数组长度 ];
语法3---静态:
数据类型[ ] 数组名 = { 值1,值而,....};
注意:基本数据类型的数组为空时默认为0;引用数据类型的数组为空时默认为null
---4,使用
1,改
语法:
数组名[下标] =值;
2,查
a,获取数组中单个元素
语法:数组名[ 下标];
b,获取数组的长度
语法:数组名 . length;
---5,常见异常错误
1,ArrayIndexOutOfBoundsException: 数组下标越界异常
原因:获取或修改数组中数据时,下标超出下标的取值范围
下标取值范围:0~数组长度-1
2,NullPointerException: 空指针异常
原因:使用null调用了属性或方法
解决方法:保证不要使用null调用属性或方法
---6,【了解:
new:在堆内存中开辟一块内存地址
可变参数:
1,解决问题:形参数量固定的问题
2,要求:只能用于形参,只能位于形参的尾部,一个方法只能有一个可变参数
3,语法:数据类型 ... 变量名
】
2.进阶使用
---1,遍历
作用:将数组中的元素利用循环读取出来
/**
1,分别使用for与foreach遍历以下数组
String[] strs = {"java","javase","javaee","javame","jdk","jre","jvm"};
int[] nums = new int[]{8,6,4,9,88,886,999};
*/
public class Demo04 {
public static void main(String[] args) {
String[] strs = {"java","javase","javaee","javame","jdk","jre","jvm"};
int[] nums = new int[] {8,6,4,9,88,886,999};
//for循环遍历数组strs
for (int i = 0; i < strs.length; i++) {
System.out.print(" "+strs[i]);
}
System.out.println();
//for循环遍历数组nums
for (int i = 0; i < nums.length; i++) {
System.out.print(" "+nums[i]);
}
}
}
结果:
---2,查找
作用:逐个取出数组中的每个元素,与指定的数据进行比较
import java.util.Scanner;
public class Demo06 {
/**
* 1.查找
*/
public static void main(String[] args) {
int[] num = new int[] {12,34,27,9,44,78,23,10,1,56};
Scanner scan = new Scanner(System.in);
while(true) {
System.out.println("请输入您要查找的数:");
int tag = scan.nextInt();
boolean b = find1(num, tag);
System.out.println(b);
//find(num, tag);
}
}
//方法一:
// public static void find(int[] num,int tag) {
// for (int i: num) {
// if (i == tag) {
// System.out.println("该数字在数组中!");
// }
// }
// System.out.println("该数字不存在数组中!");
// }
//}
//方法二:
public static boolean find1(int[] num,int tag) {
for (int i : num) {
if (i == tag) {
return true;
}
}
return false;
}
}
结果:
---3,拷贝
作用:将老数组中的元素复制到新数组所对应的位置上
思路:
1,创建一个新的数组,要求新数组的长度等于老数组的长度
2,遍历老数组,读取元素
3,将老数组中读取出来的值放到新数组对应的位置上
---4,扩容
作用:将长度较短的老数组进行扩充,增加数组长度
思路:
1,创建一个新的数组,要求新数组的长度大于老数组的长度
2,遍历老数组,读取元素
3,将老数组中读取出来的值放到新数组对应的位置上
4,将新数组赋值给老数组
public class Demo05 {
public static void main(String[] args) {
int[] num = {1,2,3,4};
//1 ,拷贝
//创建一个新数组
int[] num1 =new int[4];
//读取老数组的元素
for (int i = 0; i < num.length; i++) {
//将老数组的元素放到新数组的对应位置上
num1[i] +=num[i];
System.out.println(num1[i]);
}
System.out.println("-------------------------------");
//2, 扩容
//创建一个新数组
int[] num2 =new int[num.length+10];
if (num.length<num2.length) {
//读取老数组的元素
for (int i= 0; i < num.length; i++) {
//将老数组的元素放到新数组的对应位置上
num2[i] += num[i];
System.out.println(num2[i]);
}
}
System.out.println("数组num2的长度为:"+ num2.length);
}
}
结果:
3. 增加for 循环
语法:foreach( 数据类型 变量:需要遍历的数组或集合){
循环体;
}
数据类型:遍历数组中的元素的数据类型
变量:所取遍历元素的值