java(7)数组
一、什么是数组及其作用?
定义:具有相同数据类型的一个集合
作用:存储连续的具有相同类型的数据
二、java中如何声明和定义数组
2.1 声明和定义的语法:
数据类型[ ] 数组名;( int[ ] nums ; )
或 数据类型 数组名[]; ( int nums[ ] ;)
2.2 为数组分配空间
数组名=new 数据类型[数组的长度]; ( nums=new int[5] ;)
2.3 声明数组,同时分配空间
数据类型[]数组名= new 数据类型[数组的长度];
数据类型 数组名[]=new 数据类型[数组的长度];
( int[ ] nums=new int[5] ;) ( int nums[ ]=new int[5] ;)
三、 如何读取数组中的元素— 通过下标(索引)来获取
下标(索引)是从0开始,最大下标为 数组长度-1
下标越界:ArrayIndexOutOfBoundsException
int类型的数组,每个元素的默认值为0
String类型的数组,每个元素的默认值为null
3.1、 获取单个元素的值
数据类型 变量名=数组名[下标];
3.2、循环读取数组中的每个元素
数组的长度:数组名.length 属性自动计算
for(int i=0;i<数组名.length ;i++){
数组名[i];
}
四、如何给数组中的元素赋值
方式1(赋予数组固定值):
声明数组,分配空间,并赋值
(数组的长度由值的个数决定)
数据类型 数组名[]=new 数据类型[]{值1,值2…值n};
或
数据类型 []数组名={值1,值2…值n};
说明:[]中括号可以放在数组名前面或后面
方式2:动态的给数组赋值(从键盘中输入)
Scanner input = new Scanner(System.in);
for(int i=0;i<数组名.length ; i++){
String类型的数组名[i]= input.next ();
int类型的数组名[i]= input.nextInt ();
double类型的数组[i]=input.nextDouble();
}
五、求数组中最值的位置
1、在循环的外面,定义变量k(赋值为0),用于保存最值的下标
2、在循环中,比较找出最值的同时,给变量k赋值
1 public class Practice1 { 2 public static void main(String[] args){ 3 int[] grade= new int[5]; 4 int max=0; 5 Scanner input = new Scanner(System.in); 6 System.out.println("请输入5位学员的成绩:"); 7 for(int i=0;i<grade.length;i++){ 8 grade[i]=input.nextInt(); 9 } 10 max=grade[0]; 11 for(int i=1;i<grade.length;i++){ 12 if(grade[i]>max){ 13 max=grade[i]; 14 } 15 } 16 System.out.println("考试成绩最高分为:"+max); 17 } 18 }
运行结果:如图:
六、求最大值或最小值
实现思路:将数组中的第1个元素的值,假想成最大(小)值【赋值】;然后数组中的每个元素和假想的这个最大(小)数进行比较,如果数组中的某个元素的值,比最大(小)数要大(小),将该元素的值,保存到假想的最大(小)值对应的变量中【给假想最值变量赋值】
七、数组排序问题
使用Arrays. sort(数组名);
实现对数组中的元素按升序或降序输出
1 public class practice2 { 2 public static void main(String[] args){ 3 int[] a={5,4,2,9,1}; 4 Arrays.sort(a); //进行排序 5 for(int i: a){ 6 System.out.print(i+"\t"); 7 } 8 } 9 }
运行结果:如图:
八、斐波那契数列
1,1,2,3,5,8,13,21,34……求第20个数字的值?(使用循环)
规律:第i个 + 第(i+1)个 = 第(i+2)个
步骤1:定义数组,数组长度为20
int []nums=new int[20];
步骤2:根据规律,获取第0个和第1个数的初值
nums[0]=1;
nums[1]=1;
步骤3:通过循环,给数组中的所有元素赋值
for ( int i=0;i<nums.length-2;i++){
nums [i+2]=nums[i]+nums[i+1];
}
或
for(int i=2;i<nums.length;i++){
nums[i]=nums[i-2]+nums[i-1];
}
步骤4:输出nums[19]的值
九、已知1个按升序或降序排列的数组,向该数组中,插入一个新的值,插入成功后,数组仍然按照升序或降序排列?
1、 设置插入位置变量index的初始值为:数组长度-1;
2、 使用第1个循环,让插入的数值和数组中的每个元素进行比较,如果插入的数值比数组中某个元素的值要大或小,把该元素的下标的值, 赋予插入位置变量index,同时终止循环
3、 使用第2个循环,移动位置,从【数组长度-2】到【插入位置变量index】
4、 将插入的值,保存到数组下标为index的位置
5、 使用第3个循环,输出数组所有元素的值,同时输出新值插入的位置
1 public class Practice4 { 2 public static void main(String[] args){ 3 int[] ming =new int[6]; 4 ming[0]=98; 5 ming[1]=85; 6 ming[2]=82; 7 ming[3]=63; 8 ming[4]=60; 9 int index=ming.length; 10 System.out.println("请输入新增成绩:"); 11 Scanner input = new Scanner(System.in); 12 int num=input.nextInt(); 13 for(int i =0;i<ming.length;i++){ 14 if(num>ming[i]){ 15 index = i; 16 break; 17 } 18 } 19 for(int j=ming.length-1;j>index;j--){ 20 ming[j]=ming[j-1]; 21 } 22 ming[index] = num; 23 System.out.println("插入成绩的下标是:"+index); 24 System.out.println("插入后的成绩信息是:"); 25 for(int l=0;l<ming.length;l++){ 26 System.out.print(ming[l]+"\t"); 27 } 28 } 29 }
运行结果:如图: