2022-07-16 第七小组 姜珊

员工系统案例(java基础);练习题

ackage com.jsoft.morning;

import java.util.Scanner;

public class Ch01 {

    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();
                /*接下来要做得事:
                    把员工的姓名和工号保存到对应的数组里
                    有问题?
                    如果第一次输入的员工信息,保存到0的位置
                    第二次输入的员工信息,保存到1的位置
                 */
//                nos[0] = no;
//                names[0] = name;
//                no++;
//                nos[1] = no;
//                names[1] = name;
                    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++) {
                            // 数组中的数据的复制
                            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:
            }
        }

    }
}

ckage com.jsoft.afternoon;

import java.util.Scanner;

public class Ch01 {

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 class Ch04 {

public static void main(String[] args) {
    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);
        }
    }

}

}`
今天进一步学习了数组,掌握的不是很好,理解非常慢,老师讲起来思路很清晰,感觉很理解,但是自己写代码,思路不够清晰,Java基础感觉理解的也不是很好,综合的时候思路总是混乱,还是嵌套方面掌握的不好,每天都需要多看两次案例去理解。

posted on   j珊  阅读(24)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示