2022-07-18-第二组-曹雨-Java03一些算法知识的复习和数组排序的讲解


员工管理系统作业

一些初始值的定义

public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);
    int [] nos = new int[2];
    String [] names = new String[2];
    // 初始的工号
    int no = 1001;
    // 要操作的数组的下标
    int i = 0;
    //另外定义一个值,很多时候有大用处,新学习的思想,感觉不错,后续课程中我也常常用到
    while(true){
        System.out.println("欢迎使用员工管理系统");
        System.out.println("请选择功能:1.添加员工  2.查询员工  3.修改员工  4.删除员工");
        String flag = sc.next();
         switch (flag) {

添加员工功能
要考虑越扩容问题

case "1":

                System.out.println("请输入员工姓名:");
                String name = sc.next();
                nos[i] = no;
                names[i] = name;
                System.out.println("添加成功:员工的工号为:" + nos[i] + ",姓名:" + names[i]);
                i++;
                no++;
                

                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++) {
                        // 数组中的数据的复制
                        newNos[j] = nos[j];
                        newNames[j] = names[j];
                    }
                    // 重新赋值
                    nos = newNos;
                    names = newNames;
                }
                break;

查询功能

 case "2":
                System.out.println("请选择功能:1、根据工号查询  2、查询所有");
                String n = sc.next();
                switch (n) {
                    case "1":
                        System.out.println("请输入要查询的员工号:");
                        int s = sc.nextInt();
//                            boolean b = false;
                        // 先要去工号的数组中找,如果工号存在,拿到工号对应的下标
                        // 我还要拿着这个下标去姓名的数组中找姓名
                        int index = -1;
                        for (int j = 0; j < nos.length; j++) {
                            if(nos[j] == s){
                                // 找到了
//                                    System.out.println("工号:" + s + ",姓名:" + names[j]);
//                                    b = true;
                                index = j;
                                break;
                            }
//                                else {
//                                    System.out.println("工号:" + s + "不存在!");
//                                }
                        }
                        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++) {
                            if(nos[j] != 0){
                                System.out.println("工号:" + nos[j] + ",姓名:" + names[j]);
                            }
                        }
                        break;
                    default:
                }

                break;

修改姓名

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 + "不存在!");
                }
                break;

删除操作

  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 [] arr = {1,2,0,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] == s){
                        y = j;
                        break;
                    }
                }
                if(y!= -1) {
                    System.out.println("工号:" + s + ",姓名:" + names[y]);
                    // 找到了,就删除
                    nos[y] = 0;
                    names[y] = null;

                    int [] newNos = new int[nos.length - 1];
                    String [] newNames = new String[names.length - 1];

                    for (int j = 0; j < nos.length - 1; j++) {
                       if(nos[j] == 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];
                       }
                    }
                    nos = newNos;
                    names = newNames;
                    System.out.println("工号:" + s + "删除成功!");
                }else {
                    System.out.println("工号:" + s + "不存在!");
                }
                break;
            default:
        }
    }

  }
}

有一个数组,输入一个下标,输出对应下标在数组中的值

public static void main(String[] args) {

    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("你输入的数据有误,无法获取...");
    }
  }
}

一个数组,从后往前输入数

public static void main(String[] args) {

    // 准备一个键盘
    Scanner sc = new Scanner(System.in);
    int [] arr = new int[5];
    /*
        输入一个数,数是从后往前加
        倒序输入
        第一次输入的值给arr[arr.length - 1 - 0]
        第二次输入的值给arr[arr.length - 1 - 1]
        第三次输入的值给arr[arr.length - 1 - 2]
        数组的最大下标 = 数组的长度 - 1
     */

    for (int i = 0; i < arr.length; i++) {
        System.out.println("请输入第" + (i+1) +"个数:");
        // 输入
        int num = sc.nextInt();
        arr[arr.length - 1 - i] = num;
    }
    for (int i : arr) {
        System.out.println(i);
    }
}

输入一个数,从数组后往前输入,并带有扩容功能

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int [] arr = new int[2];
    int i = 0;
    main: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];
            /*
                1,2
                [2,1]
                [0,0,0,0]
                [2,1,0,0]
                [0,0,2,1]
             */
            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;
            case "2":
                System.out.println("当前数组为:" + Arrays.toString(arr));
                break main;
                  System.exit(-1);
        }
    }
}

总结

今天老师没有讲新的知识,将昨天晚上的作业重新讲了一遍。我认识到了代码编写的灵活性,学习到了一个新的编写方法。在很多时候,新定义一个值,用来做遍历或者判断可以让很多事情迎刃而解。我使用这个方法解决了许多问题,感觉到了自己的进步,以后继续努力,学习更多编写代码的方法。

原创文章,作者:jamestackk,如若转载,请注明出处:https://blog.ytso.com/275092.html

(0)
上一篇 2022年7月18日
下一篇 2022年7月18日

相关推荐

发表回复

登录后才能评论