数组:
1.与变量的区别:
变量:存储数据的空间(装数据的容器),变量中只能装一个数据 。
数组:存储数据的空间(装数据的容器),数组中可以装多个相同类型的数据。
2.声明数组: 数据类型[] 数组名; 或者 数据类型 数组名[];
byte[] nums1; // 也可以写成 byte nums1[];
short[] nums2;
int[] nums3;
long[] nums4;
float[] nums5;
double[] nums6;
char[] chars1;
boolean[] booleans1;
String[] strs1;
2.分配空间:数组的长度是固定不变的,你需要告诉数组能存储多少个元素
// 数组名 = new 数据类型[数组长度];
nums1 = new byte[3];
nums2 = new short[4];
nums3 = new int[6];
nums4 = new long[2];
nums5 = new float[3];
nums6 = new double[4];
chars1 = new char[3];
booleans1 = new boolean[5];
strs1 = new String[4];
3.赋值:将数据存储在数组中 数组名[下标] = 数据;
nums3[0] = 11;
nums3[1] = 20;
nums3[2] = 32;
nums3[3] = 12;
nums3[4] = 31;
// nums3[5] = 23;
// ArrayIndexOutOfBoundsException
// 数组下标越界异常吗,因为nums3的长度为6,下标从0-5,6超出了下标的范围,所以报异常
// nums3[6] = 99;
4.声明数组和分配空间合并写
数据类型[] 数组名 = new 数据类型[数组长度]; 或 数据类型 数组名[] = new 数据类型[数组长度];
//声明一个长度为4的int类型的数组
int[] nums1 = new int[4];
//声明一个长度为3的String类型的数组
String strs1[] = new String[3];
//声明一个长度为5的char类型的数组
char[] chars1 = new char[5];
5.声明数组、分配空间、赋值合并写
(1)数据类型[] 数组名 = new 数据类型[]{数据1,数据2,...,数据n}; 或者 数据类型 数组名[] = new 数据类型[]{数据1,数据2,...,数据n};
boolean[] booleans1 = new boolean[]{true,false,true};
String[] strs1 = new String[]{"hello","java","java2219","world","class"};
(2)数据类型[] 数组名 = {数据1,数据2,...,数据n}; 或者 数据类型 数组名[] = {数据1,数据2,...,数据n};
char[] chars1 = {'q','w','e','r','t'};
6.操作数组中某个位置的元素(数据)
// 输出nums3数组中各个位置上的数据,通过 数组名[下标]来操作数组中某个位置上的数据
System.out.println(nums3[1]);//20
System.out.println(nums3[3]);//12
System.out.println(nums3[5]);//0
nums3[1]*=10;//nums3[1]=nums3[1]*10;
System.out.println("nums3[1]扩大10倍:"+nums3[1]);
7.注意:数组声明好并分配空间后,如果没有进行赋值操作,数组会给每个元素一个默认的初始值
// 整数类型的数组元素默认值0,浮点数类型的数组元素默认值0.0 char类型数组的数组元素默认值是空格,boolean类型数组的数组元素默认值false,引用数据类型的数组元素默认值为null
System.out.println(nums1[0]);//0
System.out.println(nums2[0]);//0
System.out.println(nums4[0]);//0
System.out.println(nums5[0]);//0.0
System.out.println(nums6[0]);//0.0
System.out.println(chars1[0]);// 空格
System.out.println(booleans1[0]);//false
System.out.println(strs1[0]);//null
示例:
public static void main(String[] args) {
/*
* 有一组学员的成绩{99,85,82,63, 60},将它们按降序排列。要增加一个学员的成绩,将它插入成绩序列,并保持降序
*
* 数组长度一旦固定好以后,是不能修改,这时候,你要插入一个学员成绩,是无法插入的,你只能新建一个长度比原来数组长度大1的数组
*
*
* 1)新建一个长度比原来数组大1的数组
*
* 2)将原来数组中的元素存储到这个新的数组中
*
* 3)获取你要插入的数据
*
* 4)获取插入元素要插入的位置(下标),通过循环比较插入的数据与数组中元素得到
*
* 5)从插入位置开始及之后的元素依次往后移动一个位置,空出插入位置,存储插入的元素,移动需要从最后一个位置开始操作
*
* 6)将插入的元素存储到插入位置
*/
// 创建Scanner类对象,用于输入你要插入的数据
Scanner sc = new Scanner(System.in);// 原来的成绩数组
int[] scores = { 99, 85, 82, 63, 60 };// 1)新建一个长度比原来数组大1的数组
int[] newScores = new int[scores.length + 1];
// 2)将原来数组中的元素存储到这个新的数组中
// newScores[0]=scores[0];
// newScores[1]=scores[1];
// newScores[2]=scores[2];
// newScores[3]=scores[3];
// newScores[4]=scores[4];for (int i = 0; i < scores.length; i++) {
newScores[i] = scores[i];
}// 遍历数组
System.out.println("插入成绩之前:");
for (int i : newScores) {
System.out.print(i + " ");
}
System.out.println();// 3)获取你要插入的数据
System.out.println("请输入你要插入的成绩:");
int insert = sc.nextInt();// 4)获取插入元素要插入的位置(下标)
int index = newScores.length-1;
for (int i = 0; i < newScores.length; i++) {
// 如果插入的元素比数组中的元素大,表面插入元素要存储在该位置
if (insert > newScores[i]) {
index = i;
// 一旦得到插入数据比数组中元素大,就结束后续比较,退出循环
break;
}
}// 5)从插入位置开始及之后的元素依次往后移动一个位置
for (int i = newScores.length - 1; i > index; i--) {
newScores[i] = newScores[i - 1];
}// 6)将插入的元素存储到插入位置
newScores[index] = insert;// 遍历数组
System.out.println("插入成绩之后:");
for (int i : newScores) {
System.out.print(i + " ");
}
System.out.println();}