2022-07-16 第二小组 张鑫 学习笔记

实训第九天 习题

1.学习重点

1.数组的增删改查

2.精准查找数组数据

3.精准插入数据到数组

4.倒叙向数组中插入数据

2.学习心得

今天是第一周学习的最后一天,心情十分的激动,今天学习的内容虽然不是很多,但是比较难理解,上午我将自己写的代码和老师进行对比,发现了很多不足之处,例如变量命名的不够规范,循环嵌套的不够清晰,下午老师讲了几个案例,我明显感觉越来月不好理解了,但是我不能放弃,明天的考试希望能发挥好的效果!

3.学习内容

员工系统完善

Scanner sc = new Scanner(System.in);
System.out.println("欢迎使用员工管理系统");
int[] nos = new int[2];
String[] names = new String[2];
int i = 0;
int no = 1001;
a:while (true) {
    System.out.println("请选择功能:1.添加员工 2.查询员工 3.修改员工 4.删除员工");
    String flag = sc.next();

数组的增删改查

switch (flag) {
     case "1":
    /*
        员工信息要保存到数组里
        1.工号(不能输入,自动生成的自动递增的一个数字1001)
        2.员工姓名:员工的工号和姓名都保存到数组里
            int [] nos = new int[10];
            String [] names = new String[10];
        3.要考虑扩容问题
     */
        System.out.println("请输入员工姓名:");
        String name = sc.next();
        /*
            把员工的姓名和工号保存到对应的数组里
            如果第一次输入的员工信息,保存到0的位置;
            第二次输入员工的信息,保存到1的位置
        */
        nos[i] = no;
        names[i] = name;
        System.out.println("添加成功,工号为:" + nos[i]+",姓名:"+names[i]);
        i++;
        no++;
        /*
            分析:
            怎么才能知道即将要越界?
            1.数组的最后一个元素不为null,0
            2.当i的值和数组的最大下标,在进入到添加功能就先判断数组的下标是否合法
            3.在添加完成后,i自增之后,再判断下一次的数组的下标是否合法
         */
        if(i >= nos.length){
            //数组扩容
            int[] newNos = new int[nos.length +1];
            String[] newNames = new String[names.length +1];
            for (int j = 0; j < nos.length; j++) {
                newNames[j] = names[j];
                newNos[j]= nos[j];
                }
            //重新赋值
            nos=newNos;
            names=newNames;
            }
        continue a;
        
    case "2":
        System.out.println("请选择功能:1.根据工号查询 2. 查询所有");
        String n =sc.next();
        switch (n){
            case "1":
            System.out.println("请输入要查询的员工号");
            int s = sc.nextInt();
            //先去工号的数组中找,如果工号存在,拿到工号对应的下标
            //用下标去姓名的数组中找姓名
            int index =-1;
            for (int j = 0; j < nos.length; j++) {
            if (nos[j] == s) {
                index = j;
                break;
                }
            }
            if (index != -1) {
                System.out.println("工号为" + s + "的员工存在,姓名是" + names[index]);
                } else {
            System.out.println("工号为" + s + "的员工不存在");
                }
            break;
            case "2":
                for (int j = 0; j < nos.length; j++) {
                System.out.println("工号" + nos[j] + "姓名" + names[j]);
            }
                break;
                default:
        }
            continue a;

    case "3":
        System.out.println("请输入要修改的工号:");
        int x = sc.nextInt();
        /*
        修改实际上是两个操作
        修改之前要先查询,看看这个人在不在数组里
        如果在,执行修改操作
        如果不在,提示不存在
         */
            int index =-1;
            for (int j = 0; j < nos.length; j++) {
                if (nos[j] == x) {
                index = j;
                break;
                    }
                }
        if (index != -1) {
        System.out.println("工号为" + x + "的员工存在,姓名是" + names[index]);
        System.out.println("请输入新的名字:");
        String newname = sc.next();
        names[index] = newname;
        System.out.println("修改成功!工号为" + x + "姓名是" + names[index]);
            } else {
            System.out.println("工号为" + x + "的员工不存在");
                }
            continue a;

    case "4":
    /*
        分析需求:
        删除nos =0,names = null
        nos =0 names =null
        移位
        1,2,3,4,5
        删除3
        1,2,0,4,5
        1,2,4,5,0
    思路:
        1,2,3,4,5
        1,2,0,4,5
        新建一个数组
        把现在数组中的数据重新放进新的数组,不包括0
        int[]arr =[1,2,3,4,5]
        int[]newArr = new int[arr.length]
     */
        System.out.println("请输入要删除的工号:");
        int s = sc.nextInt();
        int y =-1;
            for (int j = 0; j < nos.length; j++) {
                if (nos[j] == y) {
                    index = j;
                    break;
                    }
                }
                if (y != -1) {
                    System.out.println("工号为" + s + "的员工存在,姓名是" + names[y]);
    //找到了,就删除
                    nos[y]=0;
                    names[y]=null;
                    int []newNos =new int[nos.length];
                    String []newNames =new String[nos.length];
                for (int j = 0; j < nos.length-1; j++) {
                    if (nos[i] == 0) {
                    newNos[j] =nos[j+1];
                    nos[j+1]=0;
                        }else {
                    newNos[j]=nos[j];
                        }
                    if(names[j] == null){
                    newNames[j] =names[j+1];
                    names[j+1] = null;
                        }else {
                    newNames[j]=names[j];
                        }
                    }
                System.out.println("请输入新的名字:");
                String newname = sc.next();
                names[y] = newname;
                System.out.println("修改成功!工号为" + s + "姓名是" + names[y]);
                } else {
                    System.out.println("工号为" + s + "的员工不存在");
                }
                continue a;
                default:
            }
        }

案例1

Scanner sc =new Scanner(System.in);
        /*
        有一个数组
         */
        int []arr = new int[]{4,58,69,14,22,-1};
        /*
        键盘输入一个下标,获取指定下标的数字
         */
        System.out.println("请输入一个下标:");
        int index =sc.nextInt();
        /*
        输入的这个数是否合法
        需要判断几种情况\
        1.输入的是一个负值
        2.输入的是一个正值,但是越界了
        3.正确的情况
         */
        if (index >= 0 && index <= arr.length-1) {
            //合法情况
            System.out.println("对应位置的值是:"+arr[index]);
        }else {
            //条件<0 || >5
            //越界
            System.out.println("你输入的数据有误,无法获取...");
        }

案例2

int []arr = new  int[5];
        System.out.println("请输入数组中的5个值:");
        /*
                输入一个数,数是从后往前加
                倒叙输入
         */
        for (int i = arr.length-1;i >-1 ; i--) {
            Scanner sc =new Scanner(System.in);
            int num =sc.nextInt();
            arr[i]=num;
        }
        System.out.println("输出的数组为:");
        for (int i : arr) {
            System.out.print(i+" ");
        }

案例3

Scanner sc = new Scanner(System.in);
        int [] arr = new int[2];
        int i = 0;
        ma:while(true) {
            System.out.println("请输入数据:");
            int num = sc.nextInt();
            arr[arr.length - 1 - i] = num;
            i++;
            if (i >= arr.length) {
                int[] newArr = new int[arr.length * 2];
                for (int j = 0; j < arr.length; j++) {
                    newArr[newArr.length - 1 - j] = arr[arr.length - 1 - j];
                }
                arr = newArr;
            }
            System.out.println("是否继续添加:1、是   2、否");
            String flag = sc.next();
            switch (flag){
                case "1":
                    continue ma;
                case "2":
                    System.out.println("当前数组为:" + Arrays.toString(arr));
                    break ma;
            }
        }

案例4

Scanner sc = new Scanner(System.in);
        int [] arr = new int[]{1,2,3,4,5};
        // 扩容
        int [] newArr = new int[arr.length * 2];

        for (int j = 0; j < arr.length; j++) {
            newArr[j] = arr[j];
        }
        arr = newArr;
        main:while(true){
            System.out.println("请输入要插入数据的下标:");
            int index = sc.nextInt();
            System.out.println("请输入要插入的数据:");
            int num = sc.nextInt();
        /*
            1.因为数组已满,需要扩容
            2.找到要插入的数据的位置
            3.插入位置后面的数据需要向后移位
         */
            // 定义一个临时变量,存储原来index位置的元素
       int temp = arr[index];
        // 把要插入的数存到了指定的位置
        arr[index] = num;
       // 原来位置的后面的那个数向后移一位
        arr[index + 2] = arr[index + 1];
        arr[index + 1] = temp;
            // 要插入的位置的原始数据保存起来
            int temp = arr[index];
            // 把要插入的数据放到指定位置
            arr[index] = num;
            //判断要移位的数据的个数
            for (int i = 1; i < arr.length - index; i++) {
                arr[arr.length - i] = arr[arr.length - 1 - i];
            }
            arr[index + 1] = temp;
            System.out.println("现在数组为:" + Arrays.toString(arr));
            System.out.println("是否继续添加:1、是   2、否");
            String flag = sc.next();
            switch (flag){
                case "1":
                    continue;
                case "2":
                    System.out.println("当前数组为:" + Arrays.toString(arr));
                    break main;
//                    System.exit(-1);
            }
        }
posted @ 2022-07-16 21:25  菜鸡成长记  阅读(31)  评论(0)    收藏  举报