【Java全栈学习笔记-U1-day06】数组

【Java全栈学习笔记-U1-day06】数组

day06 数组


课程目标

  1. 理解数组

  2. 使用数组

  3. 数组的应用

插入算法实现

一、 数组(Array)

1.1什么是数组

数组是一个变量,用来存储一组相同数据类型的数据。

1.2 使用数组

public static void main(String[] args) {
    //1.声明数组
    //数据类型 [] 数组名称;
    int [] maths;
    //2.给数组分配内存空间
    //数组名称 = new 数据额类型[数组长度];
    maths = new int[4];
    //3.数组赋值 注意:索引位置从0开始
    //数组名[索引位置] = 值;
    maths[0] = 5;
    maths[1] = 10;
    maths[2] = 15;
    maths[3] = 20;
    //4.获取数组中的值(元素)
    //数组名[索引位置]
    System.out.println(maths[0]);

    //5.使用循环控制数组输出
    for (int i = 0; i < maths.length; i++) {
        System.out.println(maths[i]);
    }

    //6.获取数组长度
    //数组名称.length

    //定义数组并分配内存空间
    //数据类型 [] 数组名 = new 数据类型[长度];
    //int [] maths = new int[4];

    //8.定义数组并且初始化
    //数据类型 [] 数组名称 = new 数据类型[]{元素1, 元素2, ...}
    //数据类型 [] 数组名称 = {元素1, 元素2, ...}
    //int [] maths = new int[]{5, 10, 15, 20};
    //int [] maths = {5, 10, 15, 20}; //必须写成一行
}

注意:数组下标越界异常(不能超出数组长度)

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5

1.3 综合示例

综合示例1

public static void main(String[] args) {
    //示例:循环输入5笔购物金额,进行显示
    Scanner input = new Scanner(System.in);
    //1.定义数组 用于存购物金额
    int [] moneys = new int[5];
    //2.循环输入内容存入数组
    for (int i = 0; i < moneys.length; i++) {
        System.out.println("请输入第" + (i + 1) + "笔购物金额");
        int money = input.nextInt();
        //将每笔购物金存入数组
        moneys[i] = money;
    }
    //显示数组
    int sum = 0;    //累加器
    System.out.println("序号\t\t金额");
    for (int i = 0; i < moneys.length; i++) {
        System.out.println((i + 1) + "\t\t" + moneys[i]);
        sum = sum + moneys[i];
    }
    System.out.println("总金额:" + sum);
}

二、数组应用

2.1 排序

//1.排序:使用Arrays的sort方法进行升序排列
//1.1导入Arrays类
//import java util.Arrays
//1.2 使用sort方法进行升序排序
Arrays.sort(数组名称);

2.2 了解Arrays的其他方法

public static void main(String[] args) {
    int [] ary = {1, 2};
    int [] arys = {1, 2, 1};
    System.out.println("判断两数组是否相等:" + Arrays.equals(ary, arys));
    System.out.println("将数组转化为字符串:" + Arrays.toString(ary));
    System.out.println("查找某个元素在数组中出现的位置,找不到则返回-3:" + Arrays.binarySearch(ary, 8));
}

注意:使用binarySearch的前提条件是数组要排序

2.3 数组插入的算法实现

数组插入的算法实现

//插入元素
int pos=2;  //指定插入的位置
//将插入位置的数依次往后移动位置
for (int i = 数组名.length-1; i >插入的位置; i--) {
    temp[i]=temp[i-1];
}

三、 数据类型转换

3.1 数据类型由低到高的顺序

char→short→int→long→float→double

3.2 数据类型转换的分类

隐藏数据类型转换:数据类型由低向高自动转换称为隐藏转换
**强制(显式)**数据类型转换:数据类型由高到低转换称为强制转换

(目标类型)变量
示例:
char c='A';
int math=c;   //发生隐藏转换
System.out.println(math);

int math2=97;
char c1=(char)math2;   //强制转换
System.out.println(c1);

作业

作业一

某班级参加有五名学员参加考试,求出总分,平均分,最高分,最低分,还要将每个学生分数由到高排序。

请输入第一个学生的成绩:20

请输入第一个学生的成绩:50

请输入第一个学生的成绩:70

请输入第一个学生的成绩:60

请输入第一个学生的成绩:30

输出示例:

image-20240323122656791

import java.util.Arrays;
import java.util.Scanner;

/**
 * @Author: 开心就好9905
 * @Date: 2024/3/22 20:35
 * @Description:作业一:某班级参加有五名学员参加考试,
 * 求出总分,平均分,最高分,最低分,还要将每个学生分数由到高排序。
 */
public class Grade_of_Students {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int[] grades = new int[5];

        for (int i = 0; i < grades.length; i++) {
            System.out.print("请输入第" + (i + 1) + "个学生的成绩:");
            grades[i] = scanner.nextInt();
        }

        Arrays.sort(grades);    //排序

        System.out.println("序号\t\t成绩");
        for (int i = 0; i < grades.length; i++) {
            System.out.println((i + 1) + "\t\t" +grades[i]);
        }
        //输出最高最低分
        //方法一:
        //排好序了,所以最高分就是数组最后一个元素,最低分就是数组第一个元素
        //System.out.println("最高分:" + grades[4]);
        //System.out.println("最低分:" + grades[0]);

        //方法二:通用办法,假如没有排过序就用此办法
        int max = grades[0];
        for (int i = 0; i < grades.length; i++) {
            if (grades[i] > max){
                max = grades[i];
            }
        }
        System.out.println("最高分:" + max);

        int min = grades[0];
        for (int i = 0; i < grades.length; i++) {
            if (grades[i] < min){
                min = grades[i];
            }
        }
        System.out.println("最低分:" + min);

        //求平均分和总分
        int sum = 0;
        for (int i = 0; i < grades.length; i++) {
            sum += grades[i];
        }
        int avg = sum / grades.length;
        System.out.println("平均分:" + avg);
        System.out.println("总分:" + sum);
    }
}

作业二

image-20240323145402276

import java.util.Arrays;
import java.util.Scanner;

/**
 * @Author: 开心就好9905
 * @Date: 2024/3/23 14:54
 * @Description:作业二:将一组乱序字符进行排序,并且进行升序和逆序输出
 */
public class Array_Sort {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        char [] arys;

         /*
        //输入字符数组的方式
        for (int i = 0; i < arys.length; i++) {
            arys[i] = input.next().charAt(i);
        }
         */
        arys = new char[]{'a', 'c', 'u', 'b', 'e', 'p', 'f', 'z'};

        System.out.print("原字符序列:");
        for (int i = 0; i < arys.length; i++) {
            System.out.print(arys[i] + " ");
        }
        System.out.println();

        Arrays.sort(arys);
        System.out.print("升序排序后:");
        for (int i = 0; i < arys.length; i++) {
            System.out.print(arys[i] + " ");
        }
        System.out.println();

        System.out.print("逆序输出为:");
        for (int i = 0; i < arys.length; i++) {
            System.out.print(arys[arys.length - 1 - i] + " ");
        }
    }
}

作业三

实现数组拷贝

将以下两个数组的内容复制到另一个数组(结果是:10,20,30,40,50,60, 70,80,90)

int ary[]={10,90,30,60};

int ary2[]={50,20,70,80,40};

import java.util.Arrays;

/**
 * @Author: 开心就好9905
 * @Date: 2024/3/27 0:38
 * @Description:作业三:实现数组拷贝,将以下两个数组的内容复制到另一个数组
 */
public class Array_Copy {
    public static void main(String[] args) {
        int [] ary1 = new int[]{10, 90, 30, 60};
        int [] ary2 = new int[]{50, 20, 70, 80 ,40};
        int [] ary3 = new int[ary1.length + ary2.length];   //用于存放结果的数组

        /*//方法一:遍历赋值
        for (int i = 0; i < ary1.length; i++) {
            ary3[i] = ary1[i];
        }

        for (int i = ary1.length; i < ary1.length + ary2.length; i++) {
            ary3[i] = ary2[i - ary1.length];
        }*/

        //方法二:使用System.arraycopy()
        System.arraycopy(ary1, 0, ary3, 0, ary1.length);
        //将ary从0下标开始长度为ary1.length的元素复制给ary3从0开始长度为ary1.length的元素
        System.arraycopy(ary2, 0, ary3, ary1.length, ary2.length);
        //将ary2从0下标开始长度为ary2.length的元素复制给ary3从ary1.length开始长度为ary.length的元素

        Arrays.sort(ary3);

        /*System.out.print("最后结果:");
        for (int i = 0; i < ary3.length; i++) {
            System.out.print(ary3[i] + " ");
        }
        System.out.println();*/
        System.out.println("最后结果:" + Arrays.toString(ary3));
    }
}

作业四

练习在以下数组中的第2个位置插入元素(100)

int [] temp=new int[10];
temp[0]=5;
temp[1]=10;
temp[2]=15;
temp[3]=20;

import java.util.Arrays;

/**
 * @Author: 开心就好9905
 * @Date: 2024/3/27 1:09
 * @Description:作业四:练习在以下数组中的第2个位置插入元素(100)
 */
public class Array_Insert {
    public static void main(String[] args) {
        int [] tmp = new int[10];
        tmp[0] = 5;
        tmp[1] = 10;
        tmp[2] = 15;
        tmp[3] = 20;

        //指定插入的位置
        int pos = 2;
        //指定插入的元素
        int inNum = 100;

        //将插入位置后的元素顺序后移
        for (int i = tmp.length - 1; i > pos ; i--) {
            tmp[i] = tmp[i - 1];    //前一个位置赋值给后一个位置
        }

        //在插入位置赋值
        tmp[pos] = inNum;
        /*System.out.print("插入元素后的数组内容:");
        for (int i = 0; i < tmp.length; i++) {
            System.out.print(tmp[i] + " ");
        }
        System.out.println();*/
        
        System.out.println("插入元素后的数组内容:" + Arrays.toString(tmp));
    }
}

选做

在程序中有以下数组

String names[]={“张三”,”李四”,”麻子”,”小林子”,”无情”}

存放了所有的学生姓名。

请输入一个姓名,判断学生是否存在

效果如下:

1.输入不存在的情况:

请输入学生姓名:张三丰

没有找到该学生

2.输入存在的情况:

请输入学生姓名:麻子

存在

选做:实现该生在第几个位置

import java.util.Scanner;

/**
 * @Author: 开心就好9905
 * @Date: 2024/3/27 1:17
 * @Description:略
 */
public class Arrays_Student_Names {
    public static void main(String[] args) {
        //System.out.println("查找某个元素在数组中出现的位置,找不到则返回-3:" + Arrays.binarySearch(ary, 8));
        Scanner scanner = new Scanner(System.in);

        String [] names = new String[]{"张三", "李四", "麻子", "小林子", "无情"};
        String [] results = new String[names.length];
        System.out.print("请输入学生姓名:");
        String name = scanner.next();
        for (int i = 0; i < names.length; i++) {
            if (name.equals(names[i])){
                System.out.println("存在");
                System.out.println("该生在第" + (i + 1) + "个位置");
                break;
            }else{
                if (i == names.length - 1){
                    System.out.println("没有找到该学生");
                }
            }
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值