问题1:为什么要用数组?
答:如果要存放一个学生的姓名,我们可以定义一个String类型的变量进行存储
String name;
问题:如果我们要存储1000个学生的姓名,难道我们还需要定义1000个变量进行存储?这样操作显示不合适
@@@ 要解决这个问题,我们只需要定义一个数组即可存储多个数据信息
问题2:什么是数组?
答:数组是内存中一段连接的存储空间。定义一个数组,可以向数组中存放多个相同类型的数据
@@@:关键点:
1、数组是内存中的一段连接的存储空间
2、它所存的数据,必须是同一种数据类型
3、数组的大小,一开始确定以后,就不能再改变
@@@@: 我们只需要定义一个数组,就可以保存N个相同类型的数据
问题3:如何访问数组中的数据
答:数组是内存中一段连续存储空间,数组中的每一个位置都有一个编号,这个编号称为:数组下标
@@数组下标的特点:
1、数组下标一定是从0开始
2、数组下标必须要连续
操作数组,不论是存或者取,都要通过数组下标来操作
问题4:定义数组的语法(所有数据类型,都可以定义数组,此处,我们以int为例)
语法1:
数据类型[] 数组名称 = new 数据类型[数组的大小];
例如: int[] arrs = new int[4];
说明:此代码表示:
1、定义了一个int类型的数组,只能存放int类型的数据
2、数组大小为4,内存中只会分配4个连续的存储空间,可以存放4个int类型的数据
请问:这个空间的下标,分别是多少?
答 : 0 1 2 3
@@@@@@@@@:操作数组的数据,必须通过下标访问,下标一定是从0开始
它是内存中一段连续的存储空间,用于存储一组相同类型的数据
1、它在内存中的存储空间是连续的
2、它存放的数据必须是同一种类型
3、要操作数组中的数据,必须通过下标操作,下标是从0开始,一定要连续
4、数组的长度一旦确定,就不允许再改变
@@@@:每一种数据类型都可以创建数组,此处,我们以int类型为例
第一种: 先创建数组,再通过下标给数组赋值
int[] arrs = new int[3];
int arrs1[]=new int[10];
int []arrs2=new int[10];
//这三种定义方法都是正确的,但我们通常一般使用的是第一种
arrs[0]=111;
arrs[1]=222;
arrs[2]=333;
此代表,表示:创建了一个int类型的数组,只能存放int类型的数据,最多只能存放3个数据
这个3个数据,对应的下标依次是: 0,1,2
这种写法,也可以替换成:
int arrs[] = new int[3];
第二种: 创建数组时,直接给数组赋值
int[] arrs =new int[]{
111,222,333};
//以上写法,可以进行简化
int[] arrs = {
111,222,333};
如果数组的长度为N,最大下标是:N-1
//定义一个String 类型的长度为3的数组
String[] arrs = new String[3];
arrs[0]="AAA";//在下边为0的数组中存"AAA"
arrs[1]="BBB";//在下边为1的数组中存"BBB"
arrs[2]="CCC";//在下边为2的数组中存"CCC"
//循环打印输出数组里面的内容
for(int i=0;i<3;i++){
System.out.println(arrs[i]);
}
上面代码中 [3] :中括号里面的3指的是数组长度
ps: 在数组中,有一个属性,可以直接获得数组长度
数组名称.length--------------获得数组的长度
@@@@@@如果声明了数组,没有给数组中存储数据,数组将自动产生默认值
int数组的数据,默认值是0
String数组的数据,默认值是null
double数组的数据,默认值是0.0
boolean数组的数据,默认值是false
@@@@假设,数组中存储多个值,现在要找出数组中的最大值或最小值
数组的排序:
数据从小到大排列,这种排序方式,我们称为:升序排序
例如: 1 2 3 4 5
数据从大到小排列,这种排序方式,我们称为:降序排序
例如: 5 4 3 2 1
//随机生成10个学生的成绩,请找出最高分,最低分,平均分,总分
int[] arrs =new int[10];//定义一个可以存10个数的数组
double sum=0;//定义一个变量存放总数
for(int i=0;i<arrs.length;i++) {
//arrs.length 是数组的长度
arrs[i]=(int)Math.round(Math.random()*100);//Math.round 的意思是四舍五入
//Math.random 的意思是随机生成一个0-1的数
System.out.print(arrs[i]+" ");
sum +=arrs[i];//把每一个随机生成的数加到定义的总数中去
}
System.out.println();//换行
int max=0;//定义一个数,存放最大数
int mix=arrs[0];//假设第一个数是最小数
for(int j=0;j<arrs.length;j++) {
if(max<arrs[j]) {
//和数组中的每一个数进行比较
max=arrs[j];
}
if(mix>arrs[j]) {
mix=arrs[j];
}
}
System.out.println("最高分是:"+max);
System.out.println("最低分是:"+mix);
System.out.println("总分是:"+sum);
System.out.println("平均分是:"+sum/arrs.length);
在java的实例应用中,需要对数组中的数据进行排序,最常用、且最简单的排序的方式是: 冒泡排序
冒泡排序的关键思路:
相邻的两个数,进行比较。较大数,向后放,较小的数向前放
在java中,两个数要进行交换,必须定义一个临时变量,用于保存数据
目前,已经将顺序出来,但它还不是真正意义的冒泡排序
冒泡排序的公式是:
for(int i=0;i<数组长度-1;i++){
for(int j=0;j<数组长度-1-i;j++){
}
}
数组中,如果有N个数
外层循环数次: < n-1
内层循环次数: < n-1-i
在开发中,我们有一个系统提供的排序方式
Arrays.sort(arrs);//系统提供的排序方式 arrs是数组的名称
用这个方式,会自动从小到大排序
数组排序:最常用的排序方式有:
1、冒泡排序
相邻的两个数,进行比较,大的向后,小的向前
2、选择排序
当前值,分别与后面的每一个值,进行比较,小的向前放,大的向后放
之前的选择排序或者是冒泡排序都是练习算法
java中提供了一个数组类Arrays,它对排序的方法进行了封装,操作起来更加方便
Arrays.sort(数组); ---------它可以自动对数组排序
这种排序方式,默认是采用升用排序,从小到大
答:字符串,可以排序。它的排序方式是根据ascii码的顺序进行排序
A---65
B---66
Z---90
a---97
b---98
z---122
答:汉字也是可以排序的,每一个汉字,将会转换成ascii码
之前,我们对for循环的使用,主要是通过下标循环遍历
java还提供了一种for循环的用法:
@@@@@@@@这种用法还有另一个名称: foreach
for循环的增强----------------------------这种用法,主要是对数组遍历时,比较方便
用法如下:
for(数据类型 变量名称 :数组的名称){
}
@@@@@@@@@:如果要使用for循环增强的用法,需要jdk的版本,至少要1.5或者1.5以上
刚才,我们一直使用的是一维数组,java中还有二维数组、三维数组。。。。。。
此处,以int类型为例:
int[] arrs = new int[3]; ---------一维数组
int[][] arrs = new int[2][3];------二维数组
int[][][] arrs = new int[2][3][3];------三维数组
答:存放一维数组的数组,就称为:二维数组
问题:什么是三维数组?
答:存放二维数组的数组就是三维数组
int[][] arrs = new int[2][3];
2--------------代表:当前二维数组中,可以存放2个一维数组
3--------------代表:每一个一维数组中,可以存放3个int类型的数据
用法1:先声明,再赋值
int[][] arrs = new int[2][3];
arrs[0][0]=111;//将111存放 到第1个一维数组中的第1个位置
arrs[0][1]=222;//将222存放 到第1个一维数组中的第2个位置
arrs[0][2]=333;//将333存放 到第1个一维数组中的第3个位置
arrs[1][0]=444;//将444存放 到第2个一维数组中的第1个位置
arrs[1][1]=555;//将555存放 到第2个一维数组中的第2个位置
arrs[1][2]=666;//将666存放 到第2个一维数组中的第3个位置
用法2:声明二维数组,直接赋值:
int[][] arrs = { { 1, 2, 3 }, { 4, 5, 6 } };