首页 > 编程语言 >JAVA入门——对象数组:对象数组进行增删改查

JAVA入门——对象数组:对象数组进行增删改查

时间:2024-04-06 23:32:53浏览次数:29  
标签:arr JAVA int friends 改查 System 数组 Friends

题目:不使用数据库,定义长度为3的数组,存储1~3名学生对象作为初始值(即1名 2名 3名都可以),学生对象的学号具有唯一性。学生属性:学号,姓名,年龄。

要求一:再添加一个学生对象,遍历所有学生

要求二:通过学号删除学生信息,遍历所有学生

要求三: 通过学号查询学生信息,若存在则修改年龄,遍历所有学生

 

首先设置初始值并遍历一下:

//主函数:
Friends friends[]=new Friends[3];
friends[0]=new Friends(1,"张三",11);
friends[1]=new Friends(2,"李四",22);
//friends[2]=new Friends(3,"王五",33);
//这行注释掉即原始数组未存满的情况,运行则是原数组存满的情况

printArr(friends);
//遍历方法:
public static void printArr(Friends arr[]){
    for (int i = 0; i < arr.length; i++) {
        System.out.println(arr[i].getId()+"."+arr[i].getName()+","+arr[i].getAge());
    }
}

发现问题:若原始数组未存满,遍历时会报错。

分析原因:未存对象的数组默认值为null

解决方法:遍历增加if条件:只遍历arr[i]!=null(后续每次遍历都应增加if条件)

public static void printArr(Friends arr[]){
    for (int i = 0; i < arr.length; i++) {
        if(arr[i]!=null){
            System.out.println(arr[i].getId()+"."+arr[i].getName()+","+arr[i].getAge());
        }
    }
}
要求一:再添加一个学生对象,遍历所有学生

(分析:1. 对输入的学号进行唯一性判断  2. 情况一:原数组未存满,直接存入并输出;情况二:原数组已存满,创建新数组,将老数组拷贝至新数组,再将输入的对象存入新数组。)

//主函数:
        Scanner sc=new Scanner(System.in);
        Friends f=new Friends();
        Friends newf[]=new Friends[4];
        System.out.println("添加成员id:");
        while (true){
            int id=sc.nextInt();
            if(!contain(id,friends)){
                f.setId(id);
                System.out.println("添加成员姓名:");
                String name=sc.next();
                f.setName(name);
                System.out.println("添加成员年龄:");
                int age= sc.nextInt();
                f.setAge(age);

                int cnt=getCnt(friends);
                if (cnt<friends.length){
                    friends[cnt]=f;
                    newf=friends;
                }else {
                    Friends newfriends[]=creatNewArr(friends,f);
                    newf=newfriends;
                }
                printArr(newf);
                break;
            }else {
                System.out.println("该id已存在,请重新输入:");
            }
        }
//判断学号唯一性,即输入学号是否存在在原始数组中:
    public static boolean contain(int num,Friends friends[]){
        for (int i = 0; i < friends.length; i++) {
            if(friends[i]!=null){
                if(num==friends[i].getId()){
                    return true;
                }
            }
        }
        return false;
    }

 为判断原始数组是否存满,需要先统计存放数据的索引个数:

//获取原始数组存入数据的个数:
    public static int getCnt(Friends friends[]){
        int cnt=0;
        for (int i = 0; i < friends.length; i++) {
            if(friends[i]!=null){
                cnt++;
            }
        }
        return cnt;
    }
//如果原数组存满,创建新数组,并将输入的对象存入新数组:
    public static Friends[] creatNewArr(Friends old[],Friends f){
        Friends newarr[]=new Friends[old.length+1];
        for (int i = 0; i < old.length; i++) {
            newarr[i]=old[i];
        }
        newarr[old.length]=f;
        return newarr;
    }

 

要求二:通过学号删除学生信息,遍历所有学生

(分析:判断学号是否存在,若存在,返回相应索引,将索引数组赋值null;不存在提示重新输入。)

//主函数:
        System.out.println("输入删除成员的id:");
        while (true){
            int deleteid= sc.nextInt();
            if(getIndex(deleteid,newf)!=-1){
                newf[getIndex(deleteid,newf)]=null;
                break;
            }else {
                System.out.println("该id不存在,请重新输入:");
            }
        }
        printArr(newf);
//寻找学号对应的索引并返回,若不存在则返回-1:
    public static int getIndex(int num,Friends f[]){
        for(int i=0;i<f.length;i++){
            if(f[i]!=null){
                if (num==f[i].getId()){
                    return i;
                }
            }
        }
        return -1;
    }

要求三: 通过学号查询学生信息,若存在则修改年龄,遍历所有学生

 (分析:判断学号是否存在,存在则修改年龄,不存在提示重新输入。)

//主函数:
        System.out.println("输入查询修改成员的id:");
        while (true){
            int findid= sc.nextInt();
            if(getIndex(findid,newf)!=-1){
                int index=getIndex(findid,newf);
                System.out.println("修改年龄为:");
                int newage=sc.nextInt();
                newf[index].setAge(newage);
                break;
            }else {
                System.out.println("该id不存在,请重新输入:");
            }
        }
        printArr(newf);

标签:arr,JAVA,int,friends,改查,System,数组,Friends
From: https://blog.csdn.net/m0_61865496/article/details/137439786

相关文章

  • 【JAVA】JAVA多线程基础4
    目录一、synchronized关键字特性1、互斥2、刷新内存3、可重入二、synchronized使用方法1、直接修饰普通方法2、修饰静态方法3、修饰代码块三、volatile关键字一、synchronized关键字特性1、互斥synchronized会起到互斥效果,某个线程执行到某个对象的synchronized......
  • 后端学习记录~~JavaSE篇(day03-流程控制语句-上)
    if...else与Switch...case语句一、表达式和语句表达式:(1)变量或常量+运算符构成的计算表达式(2)new表达式,结果是一个数组或类的对象。(3)方法调用表达式,结果是方法返回值或void(无返回值)。语句:(1)分支语句:if...else,switch...case(2)循环语句:for,while,do...while(3)跳转语句:brea......
  • 2.手写JavaScript广度和深度优先遍历二叉树
    一、核心思想:1.深度遍历:依靠栈先进后出的机制,分别设置返回结果的数组和栈数组,首先判断栈非空,对每个结点,将其出栈并把值push到结果数组,判断是否有右左孩子,分别将其加入栈中,循环执行上述操作。否则返回结果数组。2.广度遍历:依靠队列先进先出的机制,分别设置返回结果的数组和队......
  • Java登陆第三十九天——Router编程式路由,路由传参
    在上一章节,<router-linkto="/left">左</router-link>这种这种路由,to中的内容目前是固定的。被称之为声明式路由(或普通路由)编程式路由编程式路由,可以按需决定某组件的路径映射。vue-router提供了一个函数:useRouter语法格式如下://该函数的返回值是一个路由对象。letrout......
  • 【JavaWeb】Day32.MySQL概述——数据库设计-DDL(一)
    项目开发流程需求文档:    在我们开发一个项目或者项目当中的某个模块之前,会先会拿到产品经理给我们提供的页面原型及需求文档。设计:    拿到产品原型和需求文档之后,我们首先要做的不是编码,而是要先进行项目的设计,其中就包括概要设计、详细设计、接口设计、......
  • Java-字符知识扩展
    4.6字符扩展1.字符的强制转换所有的字符本质还是数字2.转义字符:3.布尔值扩展搬砖好累呜呜呜......
  • Java实现简单背景的图片文字提取-Tesseract-OCR
    //存储开始用时longstart=System.currentTimeMillis();//加载要识别的图片Fileimage=newFile(srcpath);//设置配置文件夹微视、识别语言、识别模式Tesseracttesseract=newTesseract();tesseract.setDatapath("src/main/resources/tessdata");//设置识别语言为中文简体......
  • 数组-二维数组
    本笔记为47数组-二维数组定义方式_哔哩哔哩_bilibili的学习笔记二维数组定义方式注:常用第二种方式定义,原因:第二种方式更清晰列数可以省行数不可省,详见上述第四种定义方式示例:二维数组数组名 作用:示例:二维数组案例-考试成绩#include<bits/stdc++.h>us......
  • 【Java程序设计】【C00508】基于(JavaWeb)Springboot的企业车辆管理系统(含论文+PPT)
    基于(JavaWeb)Springboot的企业车辆管理系统(含论文+PPT)项目简介开发环境项目技术运行截图下载源码博主介绍:java高级开发,从事互联网行业十年,已经做了八年的毕业设计程序开发,开发过上千套毕业设计程序,博客中有上百套程序可供参考,欢迎共同交流学习。项目简介开发环境......
  • 【Java程序设计】【C00512】基于(JavaWeb)Springboot的协同过滤的私人诊所管理系统(含论
    基于(JavaWeb)Springboot的协同过滤的私人诊所管理系统(含论文+PPT)项目简介开发环境项目技术运行截图下载源码博主介绍:java高级开发,从事互联网行业十年,已经做了八年的毕业设计程序开发,开发过上千套毕业设计程序,博客中有上百套程序可供参考,欢迎共同交流学习。项目简介......