Geroge_GCX 2023-04-05 13:04 采纳率: 90%
浏览 19
已结题

关于java.length问题,以及构造方法问题

请教一下,
1.为什么这里arr.length,会导致else里面的内容无法运行?
2.为什么我定义的构造方法getIndex(),通过在main方法里面调用之后会打印的是地址值,而不是数组里面存储的学生对象?

package com.itheima.aritheticoperator;

public class Test2 {
    /*创建一个长度为3的数组,存储1-3个学生对象作为初始化数据
        学生对象的姓名,学号各不相同。学生属性:学号,姓名,年龄
        1.再添加一个学生对象,并对一个学生对象进行唯一性判断
        2.添加完毕之后,遍历所有学生信息
        3.通过id删除学生对象,如果存在则删除,如果不存在则显示删除失败
        4.删除完毕之后,遍历所有学生信息
        5.查询数组id为“heima002”,如果存在,则年龄加一
        * */
    public static void main(String[] args) {
        Student[] arr = new Student[3];
        Student stu = new Student("张三", 1, 25);
        Student stu1 = new Student("李四", 2, 26);
        Student stu2 = new Student("春夜", 3, 27);
        arr[0] = stu;
        arr[1] = stu1;
        arr[2] = stu2;

        Student stu3 = new Student("赵虎", 4, 28);
        boolean falg=contains(arr,4);
        if(falg){
            System.out.println("当前id不存在");
        }else{
            int count=getcount(arr);
            if (count== arr.length){
                Student[] stu5=createNewArr(arr);
                stu5[count]=stu3;
                getIndex(stu5);
            }else{
                arr[count]=stu3;
                getIndex(arr);
            }
        }
    }
    public static void getIndex(Student[] arr){
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
    public static Student[] createNewArr(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++) {
            if(arr[i]!=null){
                count++;
            }
        }
            return count;
    }

    public static boolean contains(Student[] arr, int id) {
        for (int i = 0; i < arr.length; i++) {
            Student stu=arr[i];
            int sid= stu.getId();
            if(sid==id){
                return true;
            }
        }
        return false;
    }
}

  • 写回答

4条回答 默认 最新

  • 瞬间的未来式 2023-04-05 13:09
    关注

    chatgpt:
    在你的代码中,arr.length并没有导致else里面的内容无法运行。根据你的代码逻辑,如果数组arr已满,即count==arr.length,就会新建一个长度比原数组多1的newArr数组,把原数组的元素复制到新数组中,然后再把新的学生对象添加到新数组中,并调用getIndex方法打印新数组中的所有学生对象。如果数组arr未满,就直接把新的学生对象添加到原数组中,并调用getIndex方法打印原数组中的所有学生对象。在这个逻辑下,如果数组arr已满,那么程序会执行if语句块里的内容,而不会执行else语句块里的内容,这可能是你误解了if-else语句的语法和逻辑。
    getIndex方法并没有定义构造方法,它是一个自定义方法。在这个方法中,你通过for循环遍历了传入的数组,然后打印了每个学生对象。由于Java中的对象是引用类型,因此打印出的是每个学生对象的内存地址。如果你想打印学生对象的姓名、学号和年龄,可以在Student类中重写toString方法,返回一个包含这三个属性的字符串。例如:

    public class Student {
        private String name;
        private int id;
        private int age;
    
        public Student(String name, int id, int age) {
            this.name = name;
            this.id = id;
            this.age = age;
        }
    
        // 重写toString方法
        @Override
        public String toString() {
            return "Student{" +
                    "name='" + name + '\'' +
                    ", id=" + id +
                    ", age=" + age +
                    '}';
        }
    }
    
    
    

    然后在getIndex方法中调用每个学生对象的toString方法即可:

    public static void getIndex(Student[] arr){
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i].toString());
        }
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 4月13日
  • 已采纳回答 4月5日
  • 创建了问题 4月5日

悬赏问题

  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)