题目:不使用数据库,定义长度为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