一、数组
在内存空间划出一串连续的空间(数组是一个变量,存储相同数据类型的一组数据)
数组基本要素:
1、标识符 :驼峰命名规则——>数组名
2、数组元素 ——>值
3、元素下标:从0开始,数组中的每个元素都可以通过下标来访问
4、元素类型:数组中所有元素数据类型相同——>类型(Object[]//最大的数据类型)
5、数组长度(0~长度-1 ——为元素下标)数组名.length(数组长度固定不变,避免数组越界)
二、使用数组的步骤
1、声明数组(就是在内存空间划出一层房间)
int[] a; 数据类型[] 数组名 = new数据类[大小];
2、分配空间
//边声明边赋值不能指定数组长度;
a=new int[5];
scores =new——>分配空间 int[30];
avgAge=new int[6];
name =new String[30];
3、赋值
/*未赋值的情况会有默认值,
整型默认值0,
小数默认值0.0;
char类型默认值空字符;
boolean默认值false;
String默认值null(什么都没有);*/
a[ 0 ]=8;
scroe[0]=89;
int[ ]=scros=={60,80,90,70,85};
int sum =0;
double avg;
for(int i=0//;i<=scores.lenth;i++){
//sores[i]=input.nextDouble();
sum=sum+scros[i];
}
avg=sum/scores.length;
集合赋值法:(声明、分配空间和赋值一起)!!!必须在同一个语句中进行;
int a[]={1,2,3,4,5}//这种情况不用new,也不用指定长度;
数组越界;只要不在正常的范围内使用(运行期异常)
4、处理数据
a[ 0 ]=a[ 0 ]*10;
public class Xue5 {
public static void main(String[] args) {
//int a;//变量的声明
//a=1;//变量的赋值、初始化
//a=2;//变量的重新赋值
//a++;//变量的运算;
//System.out.println(a);数据的使用
int []arr;//数组的声明
arr=new int[5];//分配空间必须指定长度
arr[0]=1;//对第一个元素的赋值
//System.out.println(arr[1]);//未赋值的情况会有默认值,整形默认值0,小数默认值0.0;char类型默认值空字符;boolean默认值false;String默认值null(什么都没有);
arr[1]=2;//对第二个元素进行赋值
arr[2]=3;
arr[3]=4;
arr[4]=5;
//arr[5]=6;//数组长度越界
System.out.println(arr[0]);
}
}
三、在数组中插入新的数据,要求排序不变
1、将成绩保存在数组中;
2、通过比较找到插入位置
3、该位元素往后移一位
4、插入新成绩
**
* @Auther Huang qinjie
* @Date 2020/4/6
* @Descripion
* 插入排序
* 外层从前向后,把一个值当基准值
* 内层从当前值开始,从后向前,依次比较
* 比当前值大的,向后移,比当前值小的,当前值在后方插入
* 如果一直没有插入,则在首位插入
*/
public class Charupaixu{
public static void main(String[] args) {
int []a=new int[5];
Scanner sc=new Scanner(System.in);
for (int i = 0; i <a.length; i++) {
a[i]=(int)(Math.random()*100);
System.out.println("第"+(i+1)+"位学员的成绩:"+a[i]);
}
System.out.println(Arrays.toString(a));
for (int i = 1; i < a.length; i++) {
int temp=a[i];
boolean flag=false;
for (int j = i-1; j>=0; j--) {
if (a[j]>=temp){
a[j+1]=temp;
flag=true;
break;
}else{
a[j+1]=a[j];
}
}
if (!flag){
a[0]=temp;
}
}
System.out.println(Arrays.toString(a));
}
}
四、数组的使用(增删改查)
1、增加元素
2、删除元素
3、修改:重新赋值
4、查询:遍历
// 遍历数组的方法
方法1: int arr[] = new int[3];
for (int a = 0; a < arr.length; a++) {
System.out.println(arr[a]);
}
方法2:for (int a : arr) { System.out.println(a); }
//二分法查找
/**
* @Auther Huang qinjie
* @Date 2020/4/6
* @Descripion
* 二分查找
* 从中间开始往两边分解查找 要查找的值——基准值
* 前提:数值是升序排列
* 1、找到中间值
* 2、中间值与中间值进行比较
* a、基准值与中间值相等,则找到了,break;
* b、基准值比中间值大,开始下标定为中间值begin=mid;
* c、基准值比中间值小,结束下标定为中间值end=mid
* 3、重复上面的过程也没办法符合2.a,则基准值不在数组内;
* 4、如果数组只剩一个元素
*/
public class Erfenfa {
public static void main(String[] args) {
int[]a={1,3,5,7,9,11,13};
int b=1;
int end=a.length;//数组的结束位置+1;
boolean isFind=false;
for (int begin = 0; begin <end ;) {//如果begin=end,代表数组中已经没有元素l;
int mid=((begin+end)/2);
if (b==a[mid]){
isFind=true;
System.out.println("在下标为:"+mid+"位置找到:");
break;
}else if(b>a[mid]){
begin=mid;
}else {
end=mid;
}
if (end-begin==1){
if (b==a[begin]){
isFind=true;//数组只剩一个元素的情况,判断是否是查找的那个数
System.out.println("在下标为:0位置找到;");
}
break;
}
}if (!isFind){
System.out.println("不存在!");
}
}
}
五、数组排序:
1、冒泡排序:双重循环,内层循环每循环一轮,确定一个最值,然后外层循环控制不断的重复内层循环,直到数组有序。
/**
* @Auther Huang qinjie
* @Date 2020/4/6
* @Descripion
* 冒泡升序
*/
public class MaoPao {
public static void main(String[] args) {
int[]a=new int[6];
for (int i = 0; i < a.length; i++) {
a[i]=(int)(Math.random()*100);
}
System.out.println(Arrays.toString(a));
for (int i = 0; i <a.length-1 ; i++) {
for (int j = 0; j <a.length-1-i ; j++) {
if (a[j]>a[j+1]){
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
System.out.println(Arrays.toString(a));
}
}
//冒泡降序
public class MaoPao{
public static void main(String[] args) {
int[]a=new int[6];
for (int i = 0; i < a.length; i++) {
a[i]=(int)(Math.random()*100);
}
System.out.println(Arrays.toString(a));
for (int i = 0; i < a.length-1; i++) {
for (int j = 0; j < a.length-1-i; j++) {
if (a[j]<a[j+1]){
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
System.out.println(Arrays.toString(a));
}
}
六、求最值
打擂台:定义一个变量tmp,与数组的每一个元素进行比较,tmp如果不满足最值的情况,把当前元素重新赋值给tmp。循环结束即可获得最值。