1.0.3<java期末项目>增删改查——添加

以下内容会同步更新到我的公众号:melred编程

前面我们已经写了菜单类和存储结构,现在就可以进行增删改查的操作了

1、添加(按顺序)

我们已经有了一个数组,现在,我们要对它进行添加,其实就是给数组元素赋值,但是如果让每个元素都可以被添加到呢?

我们可以用一个指针(其实是一个整型变量,它表示一个数组下标)来定位数组元素

private static int n = 0;//数组下标,每次添加之后就+1(后移)

每次当我们添加一个数据后就让它后移(自增),这样一来每次添加的位置都不一样,而且可以顺序添加。

//每次增加后
n++;

但是,这里又有一个问题,如果n超过了数组的下标范围,就会报空指针异常(NotPointException),又该如何?

首先,我们加入一个if判断,分别处理n在下标范围内和不在下标范围内的情况:

1,当在下标范围内的时候:就给对应位置的元素赋值(方法参数(int b)就是传进来要添加的值),然后让n后移,下一次就在下一个位置添加

    //增加的函数
    private static void add(int b){
        //自增长添加
        if (n!=a.length) {
            a[n] = b;
            n++;
        }

 2,当不在范围内时:就把n归零,从头开始赋值,但是再次在同一个位置添加,会覆盖原来的数据

    else {
            n = 0;
            System.out.println("n已经归零");
        }
        System.out.println("下一次添加位置(非下标):"+(n+1));
    }

         更好的办法:我们可以不用if,直接让n和数组长度取模,这样就算超过数组的长度,也会循环添加(因为 n对数组长度 取模 就相当于 获取它超出数组长度多少,取模就是取余数)

2,添加(到自定义的位置

        添加到自定义位置只需要多传一个参数(表示自定义的下标),然后让数组对应位置被改变就行

    private static void add(int b,int c){
        //自定义添加位置
        a[c] = b;
        System.out.println("添加的位置(非下标):"+(c+1));
    }

        你可能会发现这两个方法都是私有,这是为了让把它们整合到一个方法里,这样别的类就不用考虑到底调用哪个而只需要根据用户输入,在整合的方法里选择调用

    //解耦合,把逻辑封装在功能类
    public static void add(Scanner scanner){
            System.out.println("输入1,按默认添加位置;输入2,自定义添加位置");
            int n = scanner.nextInt();
            if (n == 2) {
                System.out.println("输入要添加的《数字》和《位置(非下标)》,每输入一个按一次回车");
                add.add(scanner.nextInt(), scanner.nextInt() - 1);
            } else if (n == 1) {
                System.out.println("输入要添加的数字");
                add.add(scanner.nextInt());
            }
        }
    }

        这里有一个细节,我们把一个scanner类传入,让它来接收用户输入,并且可以控制我们的选项(选择调用哪个添加方法)、还可以传入要修改的数值,最重要的是,一般可能会把这个scanner写在菜单类,但是这样就会高耦合,而且菜单类会变得复杂,代码可读性差

        最后只要在菜单类调用添加类的整合方法就行了

       public static void menu() throws Exception{
        setArr();
        boolean flag = true;
        int choice = -1;
        while (flag) {
            System.out.println("---------------菜单--------------");
            System.out.println("输入数字,选择数字进行操作");
            System.out.println("1,增加");
            System.out.println("2,删除");
            System.out.println("3,修改");
            System.out.println("4,查找");
            System.out.println("5,退出");
            Scanner scanner = new Scanner(System.in);
            choice = scanner.nextInt();
            switch (choice) {
                case 1:
                    circle(scanner, 1);
                    break;
                case 2:
                    circle(scanner, 2);
                    break;
                case 3:
                    circle(scanner, 3);
                    break;
                case 4:
                    circle(scanner, 4);
                    break;
                case 5:
                    System.out.println("已经退出程序");
                    flag = false;
                    break;
            }
        }
    }

    private static void circle(Scanner scanner, int choice) {
        //把循环执行的逻辑防在菜单类,各司其职
        boolean controller = true;
        while (controller) {
            switch (choice) {
                case 1:
                    add.add(scanner);
                    break;
                case 2:
                    break;
                case 3:
                    break;
                case 4:
                    break;
            }
            System.out.println("当前的数据:"+Arrays.toString(arrays.getArr()));
            System.out.println("输入false退出,输入true继续");
            controller = scanner.nextBoolean();
        }
    }

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

飞鸟malred

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

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

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

打赏作者

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

抵扣说明:

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

余额充值