请教一下,
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;
}
}
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());
}
}
1.因为你的count就是等于length所以无法进入else
2.如果Student没有重写toString方法,就会打印地址