java中关于面向对象数组的练习
一、概要介绍
该练习主要分为以下五个要求
- 首先创建学生对象,属性包括学号、姓名、年龄
- 然后定义一个学生对象的数组存储一至三名学生对象
- 添加一名新的学生对象,添加时需要判断学号的唯一性,完成后遍历数组
- 给定一个学号,判断当前学生对象是否存在在数组中,如果存在就删除并遍历数组
- 给定一个学号,从集合中找到该学生对象并把他的年龄加一,然后遍历数组
二、具体实现
我将问题分为四个模块,首先肯定要创建学生类,这一步骤比较简单,就不附代码了,问题三四五分别在一个java类中实现。
- 问题三,首先创建一个学生对象的数组,假设存储了三个学生对象,然后对这个数组进行添加学生对象,在添加学生对象时,我们首先应该根据判断唯一性,这一步就决定了我们后面是否要进行添加,附代码如下:
public static boolean contains(Student[] arr, int num){
//依次获取到数组里面的每一个学生对象
for (int i = 0; i < arr.length; i++) {
if(arr[i] != null) {
if (arr[i].getNum() == num) {
return true;
}
}
}
return false;
}
通过这个返回值是布尔类型的函数,我们能够根据返回值决定是否需要添加学生对象,这里需要注意的是首先要判断当前数组元素是否为空,不然在编译时可能会报错,因为在判断学号时需要调用get函数。
当判断完成之后就要进行添加,这里依旧是两种情况,如果当前数组还有空位那么直接添加到相应的空位置,如果已满就需要重新创建一个数组并把数组长度加一,通过判断数组元素的个数并与数组长度进行比较来确定,代码如下:
public static int getCount(Student[] arr){
int count = 0;
for (int i = 0; i < arr.length; i++) {
if(arr[i] != null)
count++;
}
return count;
}
//不存在,判断是否存满,这是主方法中的一部分
int count = getCount(arr);
if (count == arr.length) {
}else {
//没有存满
arr[count] = stu4;
//要求2,遍历所有的学生信息
printArr(arr);
}
数组有空位置的话就直接在count对应的下标出添加元素即可,没有空位置需要重新创建一个新的学生对象数组,代码如下:
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;
}
if (count == arr.length) {
//已经存满
//创建一个新的数组,长度等于老数组 + 1
Student[] newArr = createNewArr(arr);
newArr[count] = stu4;
}
上述过程实现后对数组进行遍历即可
public static void printArr(Student[] arr){
for (int i = 0; i < arr.length; i++) {
Student stu = arr[i];
if(arr[i] != null)
System.out.println(stu.getNum() + ", " + stu.getName() + ", " + stu.getAge());
}
}
- 问题四是根据学号来删除学生对象,那么依旧是先判断数组中是否有该学号对应的学生,如果能找到的话返回下标值即可,判断代码如下:
public static int getIndex(Student[] arr , int num){
for (int i = 0; i < arr.length; i++) {
Student stu = arr[i];
if(stu != null){
int snum = stu.getNum();
if(snum == num)
return i;
}
}
//当循环结束,说明不存在
return -1;
}
遍历数组寻找给定学号对应的数组下标值,找到了就返回对应的下标,如果遍历完成仍未找到则返回-1
int index = getIndex(arr, 2);
if(index >= 0) {
//如果存在,就直接删除
arr[index] = null;
printArr(arr);
}else {
//如果不存在,则提示删除失败
System.out.println("删除失败");
}
- 问题五和问题四过程类似,还是需要先找数组中对应元素的下标值然后进行操作,这里就不多赘述,直接上代码
public static int getIndex(Student[] arr , int num){
for (int i = 0; i < arr.length; i++) {
Student stu = arr[i];
if(stu != null){
int snum = stu.getNum();
if(snum == num)
return i;
}
}
//当循环结束,说明不存在
return -1;
}
找到对应学号的学生对象后,需要调用get和set方法来实现年龄加一的功能
int index = getIndex(arr, 4);
if(index >= 0){
//存在,则将他的年龄加1
int age = arr[index].getAge() + 1;
arr[index].setAge(age);
printArr(arr);
}else{
//不存在,则直接提示
System.out.println("当前num不存在,无法修改");
}
完成后像之前一样遍历数组即可
三、案例总结
通过这个简单的面向对象数组练习,能够很好的锻炼到我们的逻辑思维能力,在实现每一个功能时都要进行思考如何进行,最终通过不同的方法实现对对象数组的具体操作。虽然整个问题的要求较多,但拆分成不同的步骤来实现就能很清晰的实现。

211

被折叠的 条评论
为什么被折叠?



