Java数组
数组是存储同一种数据类型多个元素的集合。也可以看成是一个容器。数组既可以存储基本数据类型,也可以存储引用数据类型。▪数组一旦初始化,长度不可变。长度确定下来了!!!
一维数组的声明方式:类型数组名[] 或类型[] 数组名;例如:inta[];int[]a1;doubleb[];Date[]c;//对象数组▪单独声明数组时不能指定其长度(数组中元素的数),例如:inta[5]; //非法▪这两种定义做完了,数组中是没有元素值的。
初始化
Java中的数组必须先初始化,然后才能使用所谓初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值Java中可以使用关键字new创建数组对象,完成静态初始化或动态初始化
动态初始化:初始化时只指定数组长度,由系统为数组分配初始值格式:数据类型[] 数组名= new 数据类型[数组长度];数组长度其实就是数组中元素的个数举例:int[] arr= newint[3];
解释:定义了一个int类型的数组,这个数组中可以存放3个int类型的值
静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长
格式:数据类型[] 数组名= new 数据类型[]{元素1,元素2,…};举例:int[] arr= new int[]{1,2,3};
解释:定义了一个int类型的数组,这个数组中可以存放3个int类型的值,并且值分别是1,2,3。
其实这种写法还有一个简化的写法:int[] arr= {1,2,3};
输出数组中元素的值
定义并用运算符new为之分配空间后,才可以引用数组中的某个元素;
每个数组都有一个属性length 指明它的长度,例如:a.length指明数组a 的长度(元素个数)
数组名和编号的配合就可以获取数组中的指定编号的元素。这个编号的专业叫法:索引(下标)。
数组元素的引用方式:数组名[数组元素下标]
数组元素下标可以是整型常量或整型表达式。如a[3] , b[i] , c[6*i]
数组元素下标从0开始;长度为n的数组合法下标取值范围: 0 至n-1
内存结构
动态初始化数组时,由系统给出初始值,初始值为0。
看下图所示
注意
int[] a = new int[]; new的时候就要分配内存,不指定就不知道分配多少
数组一旦初始化,长度不可变。长度确定下来了!!!
int[] a ={1,2,3};也可以
int[] a
a={1,2,3};错误
数组常见问题
数组索引越界
ArrayIndexOutOfBoundsException
访问到了数组中的不存在的索引时发生
空指针异常
NullPointerException
数组引用没有指向实体,却在操作实体中的元素时
多维数组
数组排序
冒泡排序的基本思路:假设要被排序的数组arr[0…n-1]是垂直放置的,我们将其中的每个元素都看成重量为arr[i]的气泡。那么,根据常识,我们知道重量轻的气泡会向上冒。所以我们制定轻气泡不能在重气泡下的原则。现在,我们从下向上扫描数组arr[n]中的每个元素,凡是发现违反本原则的轻气泡,就使其向上“冒”,反复的执行这个过程,直到所有元素都满足该原则。
冒泡算法原理
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较
选择排序
算法描述:对于给定的一组记录,经过第一轮比较后得到最小的记录,然后将该记录与第一个记录的位置进行交换;接着对不包括第一个记录以外的其他记录进行第二轮比较,得到最小的记录并与第二个记录进行位置交换;重复该过程,直到进行比较的记录只有一个时为止。
练习
1.求出学生成绩的总分、平均分、最高分、最低分
package com.hpe.java;
public class Demo04 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//求学生成绩的总分。平均分,最高分,最低分
int[] score =new int[]{90,80,10,23,78,99};
//总分
int sum = 0;
for(int i=0;i<score.length;i++){
sum+=score[i];
}
System.out.println("总分:"+sum);
//平均分
double avg=sum/score.length;
System.out.println("平均分:"+avg);
//最高分
int max=score[0];
for(int i=0;i<score.length;i++){
if(max<score[i]){
max=score[i];
}
}
System.out.println("最高分:"+max);
//最低分
int min=score[0];
for(int i=0;i<score.length;i++){
if(min>score[i]){
min=score[i];
}
}
System.out.println("最低分:"+min);
}
}
2.{“C语言“,”C++“,”C#“,”Java“,”Python“}; 逆序输出
package com.hpe.java;
public class Demo041 {
public static void main(String[] args) {
// TODO Auto-generated method stub
// {“C语言“,”C++“,”C#“,”Java“,”Python“}; 逆序输出。
String[] strs=new String[]{"C语言","C++","C#","Java","Python"};
for(int i=0;i<strs.length/2;i++){
String str=strs[i];
strs[i]=strs[strs.length-i-1];
strs[strs.length-i-1]=str;
}
for(String str:strs){
System.out.println(str);
}
}
}