Day4.数组

一.数组

技能目标

​ 1.掌握数组的定义

​ 2.数组的内存分配

​ 3.掌握数组的遍历

​ 4.掌握Arrays类的常用用法

​ 5.了解二维数组的使用

1.一维数组

​ 需求:

​ 存储50个学生某门课的成绩,并求其平均值

​ 分析:

​ //定义50个变量,分别存放这50个学生的成绩

​ int scorce1 =95;

​ int scorce2 =92;

​ int scorce3 =93;

​ int scorce4 =94;

​ …

​ int scorce50 =90;

​ avg =(scorce1+…+scorce50)/50

解析:
变量定义太多

在这里插入图片描述

2.定义数组

定义数组时一定要指定数组的名称和数组的类型

​ 必须的书写方式“[]”,表示的就是定义一个数组,而不是一个普通的变量

​ "[数组长度]"决定了连续分配的空间长度,通过数组length属性可以获取数组长度

​ 数组的数据类型用于确定分配每个空间的大小

例1
使用两种语句分别定义整数型数组和字符串数组

数组元素分配的初始值

数组元素的类型默认初始值
byte、short、int、long0
float、double0.0
char”\u0000“
booleanfalse
引用数据类型null
package Test;

/**
 * @作者:Xem626
 * @date: 2022/7/3 22:02
 * @TODO
 */
public class Test1 {
    public static void main(String[] args) {
        int [] score=new int[10];
        String citys[]=new String[6];
    }
}

解析:
数组score分配了5个连续的空间,每个空间都存储了我们整数型数据,每个空间的值是0;
数组citys分配了6个连续的空间,每个空间存储的是字符串
类型数据,每个空间的默认值是null

3.数组元素的表示与赋值

由于定义数组时内存分配的是连续的空间,所以数组元素在数组里面顺序排列编号,该编号即元素下标,它标明了元素在数组中的位置。首元素的编号规定为0,因此,数组下标依次为0、1、2、3、4…依次增加,每次的增长数是1.数组中的每个元素都可以通过下标来访问。例如,数组scores的第一个元素表示为scores[0].

获得数组元素的语法格式:

​ 数组名[下标值]

​ 例如

​ scorce[0] =65 //表示scorce数组的第一个元素赋值给他为65

​ scorce[1]=87 //表示scorce数组的第二个元素赋值给他为85

4.数组的初始化

所谓的数组初始化,就是在定义数组时一并完成赋值操作

​ 数组的初始化的语法格式:

​ 数据类型[] 数组名={值1,值2,…值n}

​ 或者:

​ 数据类型[] 数组名 =new 数据类型[]{值1,值2,值3,…}

package Test;

/**
 * @作者:Xem626
 * @date: 2022/7/3 22:23
 * @TODO
 */
public class Test2 {
    public static void main(String[] args) {
        int scroce[]={75,78,79};
        int scrice1[]=new int[]{75,78,79};
        
    }
}

5.遍历数组

数组和循环往往结合在一起使用,通常使用for循环

例2

创建整型数组,从控制台接收键盘输入的整型数据,并对数组进行循环赋值

​ 实现的步骤:

​ 1.创建整型数组

​ 2.创建一个Scanner对象

​ 3.将循环变量i作为数组下标,循环接收键盘输入,并为数组元素赋值

package Test1;

import java.util.Scanner;

/**
 * @作者:Xem626
 * @date: 2022/7/4 12:52
 * @TODO
 */
public class Test2 {
    public static void main(String[] args) {
        int []a=new int[10];
        Scanner scanner=new Scanner(System.in);
        for(int i=0;i<a.length;i++){
            a[i]=scanner.nextInt();

        }
        for(int j=0;j<a.length;j++){
            System.out.print(a[j]+"\t");
        }
    }
}

在这里插入图片描述

例3
需求:

​ 创建整型数组,循环输出数组元素

​ 实现步骤:

​ 1.初始化整型数组

​ 2.以循环变量i为数组下标,循环输出数组元素

package Test1;

/**
 * @作者:Xem626
 * @date: 2022/7/4 13:00
 * @TODO
 */
public class Test3 {
    public static void main(String[] args) {
        int a[]={1,2,3,4,5,6,7,8};
        for(int i=0;i<a.length;i++){
            System.out.print(a[i]+"\t");
        }
    }
}

在这里插入图片描述
dk1.5:之后为我们提供了一个增强for循环,用来实现对数组和集合中的访问,增强for循环的语法格式:

  
  ​	for(元素类型 变量名:要循环的数组或集合){



​		......

​	}

括号中的第一个元素类型指的是数组或集合中元素类型,变量名在循环时保存每个元素的值,冒号后面是我们要循环的数组或集合的名称

例4
​ 创建整型数组,利用增强for循环来输出数组的元素

​ 实现的步骤:

​ 1.初始化整型数组

​ 2.用增强for循环

package Test1;

/**
 * @作者:Xem626
 * @date: 2022/7/4 13:06
 * @TODO
 */
public class Test4 {

    public static void main(String[] args) {
         int a[]={23,23,11,24,33};
         for(int i:a){
             System.out.println("数组元素值依次为:"+i);
         }
    }
}

在这里插入图片描述

6.使用数组来计算成绩

例5
使用数组计算5名学生的平均分和最高分、最低分

​ 实现的步骤:

​ 1.定义长度为5的整型数组

​ 2.定义两个float类型的变量,用于保存总成绩、平均分、初始值为0

​ 3.定义两个int类型的变量,用于保存最高分和最低分,初始值为0;

​ 4.从控制台上接收5名学生的成绩

​ 5.通过循环使数组的5个元素相加得到总成绩

​ 6.通过循环遍历数组并比较元素的大小,得到最高分和最低分

package Test1;

import java.util.Scanner;

/**
 * @作者:Xem626
 * @date: 2022/7/4 13:10
 * @TODO
 */
public class Test5 {
    public static void main(String[] args) {
        int a[]=new int[5];
        float score=0f;
        float avg=0f;
        int max=0;
        int min=0;
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入5名学生成绩");
        for(int i=0;i<a.length;i++){
            a[i]=scanner.nextInt();
            score+=a[i];

        }
        System.out.println("总分为:"+score);
        max=a[0];
        min=a[0];

        for(int j=0;j<a.length;j++){
            if(a[j]>max){
                max=a[j];
            }
            if(a[j]<min){
                min=a[j];
            }
        }
        System.out.println("最大值"+max);
        System.out.println("最小值"+min);

    }
}

在这里插入图片描述

7.数组的添加

例6:
当已经存在一个数组”a“时,如何向数组”null”位置插入数呢?

分析:

​ index变量相当于一个监听器。赋初始值为“-1”,就是为了和数组下标:0,1,2…区分开。

遍历数组中的元素,如果发现null就会把i赋值给index,相当于找到了null的下标,此时使用break跳出循环

​ 随后进入下一个if语句,首先判断index值是否变化,如果变化了(不等于-1),说明发现null的元素

“a[index]=“p5””.因为index在上个if语句中已经充性赋值为null的下标,这时直接找到那个空位置,赋值“p5”

package Test1;

/**
 * @作者:Xem626
 * @date: 2022/7/5 21:44
 * @TODO
 */
public class Test6 {
    public static void main(String[] args) {

        int index=-1;
        String a[]=new String[]{"p1","p2","p3","p4",null};
        for(int i=0;i<a.length;i++){
            if(a[i]==null){
                index=i;
                break;
            }
        }
        if(index!=-1) {
            a[index] = "p5";

            for (int j = 0; j < a.length; j++) {
                System.out.print(a[j] + "\t");

            }
        }else{
            System.out.println("数组里满员,没有null");
        }


    }
}

在这里插入图片描述

8.数组的修改

例8
需求:

​ 当已经存在一个数组“a”,如何修改p5的值?

package Test1;

/**
 * @作者:Xem626
 * @date: 2022/7/6 9:46
 * @TODO
 */
public class Test7 {
    public static void main(String[] args) {
        int index=-1;
        String a[]=new String[]{"p1","p2","p3","p4","p5"};
        for(int i=0;i<a.length;i++){
            if(a[i].equals("p5")){
                index=i;
                break;
            }

        }
        if(index!=-1){
            a[index]="p10";
            for(int i=0;i<a.length;i++){
                System.out.println(a[i]);
            }
        }else{
            System.out.println("不存在p5");
        }
    }
}

在这里插入图片描述

9.数组的删除

需求:

​ 当已经存在一个数组“a”时,如何删除“p3”的值呢

​ 思路:

​ 首先找到要删除的位置,删除后把后面的数据依次前移,将最后以一位设置null

package Test1;

/**
 * @作者:Xem626
 * @date: 2022/7/6 9:57
 * @TODO
 */
public class Test8 {
    public static void main(String[] args) {


        int index = -1;
        String a[] = new String[]{"p1", "p2", "p3", "p4", "p5"};
        for (int i = 0; i < a.length; i++) {
            if (a[i].equals("p1")) {
                index = i;
                break;
            }
        }

            if(index!=-1){
                for(int j=index;j<a.length-1;j++){
                    a[index]=a[index+1];
                }
                a[a.length-1]=null;
            }else{
                System.out.println("没有要删除的元素");
            }
            for(int x=0;x<a.length;x++){
                System.out.println(a[x]);
            }

        }
    }



在这里插入图片描述
常见问题
数组的下标从0开始。而不是从1开始,如果访问数组元素时指定下标小于0,或者大于数组的长度,都会出现这个数组下标越界这个异常
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xem626

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值