今日小tips(书写习惯)

 一、代码书写习惯

Student stu = arr[i];
if(stu != null){

}
/*if(arr [i] != null){

}*/

两者有什么区别

这两段代码的功能都是判断数组中的元素是否为null。

在第一段代码中,将数组中的元素赋值给了一个临时变量stu,然后通过判断stu是否为null来进行处理。这样做的好处是可以在后续的代码中直接使用stu变量,避免多次访问数组元素。此外,如果需要对stu进行其他操作,也可以方便地进行扩展。

而在第二段代码中,则直接通过arr[i] != null来判断数组元素是否为null。这样做的好处是简洁明了,不需要额外的变量来存储数组元素,节省了内存空间。

总的说来,第一段代码相对于第二段代码,在可读性和扩展性方面更好一些;而第二段代码则更加简洁。具体选择哪种方式取决于具体的使用场景和个人喜好。

/*double sum = 0;
for (int i = 0; i < arr.length; i++) {
    double price = arr[i].getPrice();
    sum += price;
}*/
double sum = 0;
for (int i = 0; i < arr.length; i++) {
    Goods goods= arr[i];
    sum += goods.getPrice();
}

 

在第二段中,代码 Goods goods = arr[i]; 表示将数组 arr 中的第 i 个元素赋值给了一个名为goods 的变量。

假设 arr 是一个类型为 Goods 的数组,那么 Goods goods = arr[i]; 的含义是将 arr[i] 这个元素的值赋给 goods 变量。这样,我们就可以通过 goods 变量来引用和操作 arr[i] 所代表的对象。

这种赋值操作经常用于循环遍历数组或集合的场景中,通过将数组或集合中的元素赋值给一个临时变量,我们可以对其进行进一步的处理、访问或修改。

需要注意的是,Goods 是一个类(或数据类型)的名称,可以根据实际情况替换为其他类的名称。arr 是一个数组对象,i 是一个索引值,表示数组中的第 i 个元素。

 

/*int index1 = getIndex(arr, stu2.getId());
传递的值id直接写要删除的id也可以,使用stu2.getId()也可以*/
int index1 = getIndex(arr, 002);

 

对于 int index1 = getIndex(arr, stu2.getId());和 int index1 = getIndex(arr, 002); 这两行代码,其实在计算结果上是没有区别的。

在第一行代码中,stu2.getId()获取了一个值,假设为 002,然后将该值作为参数传递给 getIndex 方法。

而在第二行代码中,直接使用数字 002作为参数传递给 getIndex 方法。

无论是通过变量 stu2.getId()获取的值,还是直接使用数字 002,最终都会被当作参数传递给 getIndex 方法进行处理。

因此,在计算结果上,这两行代码是等价的。但需要注意的是,如果 getIndex方法要求的参数类型是字符串类型,那么第二行代码应该改为 int index1 = getIndex(arr, "002");,以将数字 002 转换为字符串类型的参数传递给方法。

二、对应题目代码

定义一个长度为3的数组,数组存储1~3名学生对象作为初始数据,学生对象的学号,姓名各不相同
学生的属性:学号,姓名,年龄。
要求1: 再次添加一个学生对象,并在添加的时候进行学号的唯一性判断
要求2:添加完毕之后,遍历所有学生信息。
要求3:通过id删除学生信息 如果存在,则删除,如果不存在,则提示删除失败。
要求4:删除完毕之后,遍历所有学生信息。
要求5:查询数组id为“heima002”的学生,如果存在,则将他的年龄+1岁
//Tset 测试类
public class Test {
    public static void main(String[] args) {
        /*定义一个长度为3的数组,数组存储1~3名学生对象作为初始数据,学生对象的学号,姓名各不相同
        学生的属性:学号,姓名,年龄。
        要求1: 再次添加一个学生对象,并在添加的时候进行学号的唯一性判断
        要求2:添加完毕之后,遍历所有学生信息。
        要求3:通过id删除学生信息 如果存在,则删除,如果不存在,则提示删除失败。
        要求4:删除完毕之后,遍历所有学生信息。
        要求5:查询数组id为“heima002”的学生,如果存在,则将他的年龄+1岁*/
        //1.创建数组来存储学生对象
        // 首先要有一个学生类创建好后回来new一个数组(学生的属性也就是成员变量,学生的行为也就是成员方法)
        Student[] arr = new Student[3];//定义数组得给数组的长度
        //2.创建学生对象并添加到数组当中
        Student stu1 = new Student(001,"张三",21);//有全参就得将属性添加进去ctrl+p可以显示
        Student stu2 = new Student(002,"李四",22);
        //Student stu3 = new Student(003,"王五",23);
        //3.把学生对象添加到数组当中
        arr[0] = stu1;
        arr[1] = stu2;
        //arr[2] = stu3;
        //要求1: 再次添加一个学生对象,并在添加的时候进行学号的唯一性判断
        //读题拆解1.添加一个学生对象2.学生对象到数组中3.存的时候要判断4.唯一性判断(方法)想想应该添加在数组的前面
        Student stu4 = new Student(004,"赵六",24);
        //添加学生对象1.数组存满--再创建一个数组,新数组=老数组长度+1
        //2.没存满--直接添加
        //唯一性判断:目的是为了id不重复(id已存在不添加反之添加) 可以用一个方法去做
        boolean flag = ifContains(arr, stu4.getId());//方法会返回一个结果将其传给flag
        //对flag做一个判断 对一个Boolean类型的做判断不要写== 可能会写成一个=就成了赋值
         if (flag){
            //id已存在
             System.out.println("当前id存在,请重新输入id");
        }else {
             //不添加反之添加
             //1.数组存满--再创建一个数组,新数组=老数组长度+1
             //2.没存满--直接添加  有没有存满也需要判断一下(也可以写一个方法)
             int count = getCount(arr);
             if (count == arr.length){
                 //说明已经存满了 要添加一个新数组
                 //使用一个方法创建一个新数组 要把老数组的元素拷贝到新数组中
                 Student[] newArr = creatNewArr(arr);
                 //添加stu4
                 newArr[count] = stu4;

                 //要求2:添加完毕之后,遍历所有学生信息。
                 // 切记这里因为新创建数组添加的元素参数一定要传递newArr
                 System.out.println("-------添加后的-------");
                 printArr(newArr);
             }else {
                 //反之没有存满直接存
                 //[stu1, stu2,nul1]
                 // getCount获取到的是2,表示数组当中已经有了2个元素
                 // 还有一层意思:如果下一次要添加数据,就是添加到2索引的位置
                 arr[count] = stu4;

                 //要求2:添加完毕之后,遍历所有学生信息。
                 System.out.println("-------添加后的-------");
                 printArr(arr);
             }
         }

        //要求2:添加完毕之后,遍历所有学生信息。
        //分两种情况一、在老数组里面添加学生对象二、在新数组 (分别写在新老数组里面代码重复,所以再一个方法)

        //要求3:通过id删除学生信息 如果存在,则删除,如果不存在,则提示删除失败。
        //想要删除就首先得找到id在数组中对应的索引(创建一个方法)
        int index = getIndex(arr, stu1.getId());//传递的值id直接写要删除的id也可以,使用stu2.getId()也可以
        //System.out.println(index);//此时找到了对应的索引如果存在(index>=0)则删除
        //通过id删除学生信息
        if(index >= 0){
            //[stu1, null ,stu3]删除也就是把index对应的元素置为null
            arr[index] = null;
            System.out.println("-------删除后的-------");
            printArr(arr);
        }else {
           //如果不存在,则提示删除失败。
            System.out.println("当前id不存在,删除失败。");
        }

        //要求4:删除完毕之后,遍历所有学生信息。 代码放在删除学生信息的后面就好
        //此时遍历直接调用printArr方法就好了

        //要求5:查询数组id为“heima002”的学生,如果存在,则将他的年龄+1岁
        //首先也得找到id为2的索引在哪
        /*int index1 = getIndex(arr, stu2.getId());
        传递的值id直接写要删除的id也可以,使用stu2.getId()也可以*/
        int index1 = getIndex(arr, 002);
        //判断索引
        if(index1 >= 0){
            Student stu = arr[index1];//将新找到的index1传给stu对象 这样子把这个位置上的元素拿出来也好传回去
            int newAge = stu.getAge() + 1;
            //拿出来对应人的age之后还要将+1放回去 要用setAge放回去也就是新获取
            stu.setAge(newAge);
            //遍历数组
            System.out.println("-------更改后的-------");
            printArr(arr);
        }else {
            System.out.println("当前id不存在,修改失败");
        }

    }


    //写一个方法找到id在数组中对应的索引
    public static int getIndex(Student[] arr,int id){
        for (int i = 0; i < arr.length; i++) {
            //可以依次得到学生对象
            Student stu = arr[i];
            //对元素也就是stu做一个非空判断
            if(stu != null){
                //得到这个sid
                int sid = stu.getId();
                //得到之后和要查找的id进行比较
                if(sid == id){//两个相同才将i索引返回(要查找的id不为空且相等才返回)
                    return i;
                }//不同就i++去查找下一个元素
            }

        }//当循环结束还没有找到就表示不存在
        //那就return一个-1就好了因为没有-1索引存在
        return -1;

    }

    //定义一个方法遍历学生信息
    public static void printArr(Student[] arr){//方法不需要返回了直接写void就行
        for (int i = 0; i < arr.length; i++) {
            //对arr做一个非空判断 因为arr有可能是空的?为什么 因为遍历每一个元素都要进行判断
            Student stu = arr[i];
            if(stu != null){
                System.out.println(stu.getId()+","+stu.getName()+","+ stu.getAge());
            }
            /*if(arr [i] != null){

            }*/
        }

    }
    //定义一个方法创建一个新数组
    public static Student[] creatNewArr(Student[] arr){
        Student[] newArr = new Student[arr.length + 1];
        //将老数组的元素甜添加到新数组当中
        //循环遍历得到老数组的每一个元素
        for (int i = 0; i < arr.length; i++) {
            newArr[i] = arr[i];
        }
        //把新数组返回
        return newArr;
    }

    //定义一个方法判断数组中已经存了几个元素
    public static int getCount(Student[] arr){
        //定义一个计数器
        int count = 0;
        for (int i = 0; i < arr.length; i++) {
        //数组中没存的地方就是null
            if (arr[i] != null){
                //统计 不是null count++
                count ++;
            }
        }
        //当循环结束后我就知道了数组中一共有几个元素
        return count;

    }

    //1.我要干嘛  唯一性判断
    //2.我干这件事需要什么 才能完成? 数组 id
    //3.调用处是否需要继续使用方法的结果 需要--必须返回(√) 不需要--可返可不返
    public static boolean ifContains(Student[] arr, int id){
        //判断的前提 依次获取到学生对象
        for (int i = 0; i < arr.length; i++) {
            //这里有个小细节不能直接遍历数组,要判断数组中的每一个元素是否为 null,
            // 因为数组如果没装满获取的是null,代码中null是不能直接使用的null调用方法就会报错
            //所以在获取元素后需要进行一个非空判断
            //有了学生对象之后需要把id拿出来才能进行比较
            Student stu = arr[i];
            if(stu != null){//元素不是null才做下面的判断
                //获取id
                int sid = stu.getId();
                //比较
                if(sid == id){
                    return true;
            }

            }
        }
        //当循环结束之后,还没有找到一样的,那么就表示数组中要查找的id是不存在的。
        return false;

    }

}

 

//Student学生类
public class Student {
    private int id;//后面也可以是字符串类型
    private String name;
    private int age;

    public Student() {
    }

    public Student(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

  • 32
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值