1.6.6 改【最讨厌的方法】
需求:
真实修改数组中保存的学生对象数据。
需要找到对应学生对象,修改其中指定的数据
方法分析:
权限修饰符:
public
是否需要static修饰
不需要
返回值类型:
Student
boolean √ 检测方法运行状态,如果出现问题,返回false
方法名:
modify
形式参数列表:
int id
方法声明:
public boolean modify(int id)
static补充
1. static修饰静态成员变量的共享性和持久性
2. static修饰静态代码块的加载性,和初始化操作
3. static修饰静态成员方法操作的便捷性和独立性
/**
* 根据用户指定的ID号,修改对应学生的信息
*
* @param id 用户指定的ID号
* @return 方法运行成功返回true,如果修改无法完成返回false
*/
public boolean modify(int id) {
// 通过类内其他成员方法获取对应ID的学生类对象
Student stu = get(id);
// 没有对应的学生类对象
if (null == stu) {
System.out.println("Not Found");
return false;
}
// 类似于点菜系统,需要完成修改操作
Scanner sc = new Scanner(System.in);
int choose = 0;
while (choose != 5) {
System.out.println("ID: " + stu.getId());
System.out.println("Name: " + stu.getName());
System.out.println("Age: " + stu.getAge());
System.out.println("Gender: " + stu.getGender());
System.out.println("Score: " + stu.getScore());
System.out.println("1. 修改学生姓名");
System.out.println("2. 修改学生年龄");
System.out.println("3. 修改学生性别");
System.out.println("4. 修改学生成绩");
System.out.println("5. 退出");
choose = sc.nextInt();
// 1\n ==> 1 程序中剩余\n
sc.nextLine();
switch (choose) {
case 1:
System.out.println("请输入学生的姓名:");
String name = sc.nextLine();
stu.setName(name);
break;
case 2:
System.out.println("请输入学生的年龄:");
int age = sc.nextInt();
stu.setAge(age);;
break;
case 3:
System.out.println("请输入学生的性别:");
char gender = sc.nextLine().charAt(0);
stu.setGender(gender);
break;
case 4:
System.out.println("请输入学生的成绩:");
int score = sc.nextInt();
stu.setScore(score);
break;
case 5:
System.out.println("保存退出");
break;
default:
System.out.println("选择错误,请重新选择");
break;
}
}
return true;
}
1.6.7 排序 【改造潜力最大的方法】
需求:
根据学生的成绩,降序排序
方法分析:
权限修饰符:
public
是否需要static修饰:
不需要
返回值类型:
void
方法名:
scoreSortDesc
形式参数列表:
不需要参数
方法声明:
public void scoreSortDesc()
/**
* 按照成绩降序排序的算法
*/
public void scoreSortDesc() {
/*
* 排序算法操作不能在原数据数组中进行直接操作,需要另外准备
* 一个用于排序的临时数组,这里就涉及到一个数据拷贝过程。
*/
Student[] sortTemp = new Student[size];
for (int i = 0; i < sortTemp.length; i++) {
sortTemp[i] = allStus[i];
}
for (int i = 0; i < sortTemp.length - 1; i++) {
// 找出极值
int index = i;
for (int j = i + 1; j < sortTemp.length; j++) {
// 按照成绩降序排序
if (sortTemp[index].getScore() > sortTemp[j].getScore()) {
index = j;
}
}
// 交换位置
if (index != i) {
Student stu = sortTemp[index];
sortTemp[index] = sortTemp[i];
sortTemp[i] = stu;
}
}
for (int i = 0; i < sortTemp.length; i++) {
System.out.println(sortTemp[i]);
}
}
1.7 主页面完成
package com.qfedu.student.system.mainproject;
import java.util.Scanner;
import com.qfedu.student.system.entity.Student;
import com.qfedu.student.system.manager.StudentManager;
public class MainProject {
public static void main(String[] args) {
StudentManager stm = new StudentManager();
for (int i = 0; i < 15; i++) {
Student student = new Student();
student.setId(i + 1);
student.setName("测试" + i);
student.setGender(Math.random() > 0.5 ? '男' : '女');
// 随机数
student.setAge((int) (Math.random() * 100));
student.setScore((int) (Math.random() * 100));
stm.add(student);
}
Scanner sc = new Scanner(System.in);
int choose = 0;
int id = 0;
while (choose != 7) {
System.out.println("1. 添加新学生");
System.out.println("2. 删除指定ID的学生");
System.out.println("3. 修改指定ID的学生");
System.out.println("4. 查询指定ID的学生");
System.out.println("5. 查询所有学生");
System.out.println("6. 按照成绩降序排序");
System.out.println("7. 退出");
choose = sc.nextInt();
sc.nextLine();
switch (choose) {
case 1:
/*
* 大家自己完成提供给用户一些输入提示,完成添加操作
*/
stm.add(new Student(100, "骚磊", 16, '男', 119));
break;
case 2:
System.out.println("请输入需要删除学生的ID号");
id = sc.nextInt();
stm.remove(id);
break;
case 3:
System.out.println("请输入需要修改信息的学生ID号");
id = sc.nextInt();
stm.modify(id);
break;
case 4:
System.out.println("请输入需要查询信息的学生ID号");
id = sc.nextInt();
Student student = stm.get(id);
if (null == student) {
System.out.println("查无此人");
} else {
System.out.println(student);
}
break;
case 5:
stm.showAllStudents();
break;
case 6:
stm.scoreSortDesc();
break;
case 7:
System.out.println("程序退出...");
break;
default:
System.out.println("选择错误");
break;
}
}
}
}