1、引用数据类型数组在语法上和基本数据类型数组是没有区别的。
2、 先给数组元素产生对象,然后赋值.否则会产生产生空指针异常.
3、用法和普通数组是一样的,但里面放的是引用 对象.
4、声明与定义 Student [] stuarr = new Student[5];
Student–>对象类型的数据类型
stuarr -->对象数组的名字
5–>数组的长度
/*
* 1、引用数据类型数组在语法上和基本数据类型数组是没有区别的。
*/
int[] arr = new int[4];
// 产生一个存放5个学生信息的数组,每个元素可以存放一个学生对象。但是每个元素现在都只是null
StudentBean[] stuArr = new StudentBean[5];
for (int i = 0; i < stuArr.length; i++) {
System.out.println("输入第" + (i + 1) + "个学生姓名:");
String name = new Scanner(System.in).next();
System.out.println("输入第" + (i + 1) + "个学生年龄:");
int age = new Scanner(System.in).nextInt();
// stuArr[i].setName(name);//产生空指针异常
// stuArr[i].setAge(age);
stuArr[i] = new StudentBean(name, age);//先给数组元素产生对象,然后赋值
}
//题1:找出年龄最大的学生
StudentBean maxStudent = stuArr[0];
for (int i = 0; i < stuArr.length; i++) {
if (maxStudent.getAge() < stuArr[i].getAge()) {
maxStudent = stuArr[i];
}
}
System.out.println("最大学生是:"+maxStudent.getName());
System.out.println("他的年龄是"+maxStudent.getAge());
//题2:用户在指定位置加入一个StudentBean对象
System.out.println("你要添加在第几个?----");
int index = new Scanner(System.in).nextInt();
System.out.println("输入添加的学生姓名:");
String name = new Scanner(System.in).next();
System.out.println("输入添加的学生年龄:");
int age = new Scanner(System.in).nextInt();
StudentBean[] newStuArr = new StudentBean[stuArr.length+1];
//法1:
// for(int i = 0;i<index -1;i++) {
// newStuArr[i] = stuArr[i];
// }
// newStuArr[index-1] = new StudentBean(name, age);
// for(int i = index ; i<newStuArr.length;i++) {
// newStuArr[i] = stuArr[i-1];
// }
//法2:
System.arraycopy(stuArr, 0, newStuArr, 0, index -1);
newStuArr[index-1] = new StudentBean(name, age);
System.arraycopy(stuArr, index-1, newStuArr, index, newStuArr.length-index);
stuArr = newStuArr;
for (int i = 0; i < stuArr.length; i++) {
System.out.println(stuArr[i].getName()+ " " +stuArr[i].getAge());
}
//题3:用户删除指定位置的StudentBean对象。删除后,要求剩余对象连续。
System.out.println(“你要删除第几个学生?----”);
index = new Scanner(System.in).nextInt();
System.arraycopy(stuArr, index, stuArr, index-1, stuArr.length-index);
newStuArr = new StudentBean[stuArr.length-1];
System.arraycopy(stuArr, 0, newStuArr, 0, stuArr.length -1);
stuArr = newStuArr;//垃圾回收
for (int i = 0; i < stuArr.length; i++) {
System.out.println(stuArr[i].getName()+ " " +stuArr[i].getAge());
}
/*
-
匹配一个用户数组中的卡号和密码
* 产生一个长度为5的UserInfo数组,放入5个用户
* 用户名:j170 — j174
* 密码:1234560 — 1234564
* 3次登录机会,登录成功,显示账户余额,否则吞卡
*
*/UserInfo[] allUsers = new UserInfo[5]; for (int i = 0; i < allUsers.length; i++) { allUsers[i] = new UserInfo("j17"+i, "123456"+i, 1000+i*100); } //记录登录成功的当前用户 UserInfo theUser = null; for (int i = 0; i < 3; i++) { // 输入用户名密码 System.out.println("请输入用户名:"); String inputName = new Scanner(System.in).next(); System.out.println("请输入密码:"); String inputPwd = new Scanner(System.in).next(); for (int j = 0; j < allUsers.length; j++) { if (allUsers[j].getName().equals(inputName)&&allUsers[j].getPassword().equals(inputPwd)) { theUser = allUsers[j]; break; } } if (theUser == null) { System.out.println("账户密码有误"); }else { break; } } if (theUser != null) { System.out.println("你的当前余额为:" + theUser.getMoney()); }else { System.out.println("吞卡"); }