方式一:将各个功能封装为函数.然后多分支去调用函数.
缺点:当功能有100个时,不能去写100个分支.
public static void main(String[] args) {
//静态初始化学生成绩数组
int[] score = {10,20,30,40,50,60,70,80};
//输出用户操作菜单
System.out.println("---------------------------");
System.out.println("欢迎来到考试管理系统");
System.out.println("1. 查看成绩");
System.out.println("2. 查看最高分");
System.out.println("3. 查看最低分");
System.out.println("4. 查看平均分");
System.out.println("5. 查看不及格人数");
System.out.println("6. 退出");
System.out.println("---------------------------");
// do {
//接受用户操作结果
System.out.println("请输入您的操作");
Scanner scanner = new Scanner(System.in);
int oprate = scanner.nextInt();
//if(oprate == 6) break;
//根据用户输入调用对应的功能函数
long start = System.nanoTime();
switch (oprate){
case 1: printScore(score); break;
case 2: maxScore(score); break;
case 3: minScore(score); break;
case 4: averageScore(score); break;
case 5: scoreFailCount(score); break;
default:
System.out.println("您输入的操作不合法,请重新输入");
}
long end =System.nanoTime();
System.out.println(end - start);
// } while (true); 162500
}
//输出学生成绩
static void printScore(int[] arr){
System.out.println(Arrays.toString(arr));
}
//查找最高分
static void maxScore(int[] arr){
int max = arr[0];
for (int i = 1; i < arr.length ; i++) {
if(arr[i] > max) max = arr[i];
}
System.out.println("成绩最高分是" + max);
}
//查找最低分
static void minScore(int[] arr){
int min = arr[0];
for (int i = 1; i < arr.length ; i++) {
if(arr[i] < min) min = arr[i];
}
System.out.println("成绩最低分是" + min);
}
//计算平均分
static void averageScore(int[] arr){
double average = 0 , sum = 0;
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
}
average = sum/arr.length;
DecimalFormat decimalFormat = new DecimalFormat("#.##");
String format = decimalFormat.format(average);
System.out.println("学生平均成绩"+format);
}
//计算不及格人数
static void scoreFailCount(int[] arr){
int count =0 ;
for (int i = 0; i < arr.length; i++) {
if(arr[i]<60) count++;
}
System.out.println("不及格人数"+count);
}
方式二:
使用反射机制,根据用户输入去动态执行对应的函数.
public static void main(String[] args) throws Exception {
//静态初始化学生成绩数组
int[] score = {10,20,30,40,50,60,70,80};
//输出用户操作菜单
System.out.println("---------------------------");
System.out.println("欢迎来到考试管理系统");
System.out.println("1. 查看成绩");
System.out.println("2. 查看最高分");
System.out.println("3. 查看最低分");
System.out.println("4. 查看平均分");
System.out.println("5. 查看不及格人数");
System.out.println("6. 退出");
System.out.println("---------------------------");
//接受用户操作结果
System.out.println("请输入您的操作");
Scanner scanner = new Scanner(System.in);
int oprate = scanner.nextInt();
// if(oprate == 6) break;
// do {
// 这段代码执行起始时间
long start = System.nanoTime(); //System.currentTimeMillis();
//根据用户输入调用对应的功能函数
String functionName = "function" + oprate; // 需要调用的函数名
String classPath = "com.itheima.d_transfer.StudentScoreManagementSystem1"; // 需要调用的函数所在的类名
// 通过反射获取需要调用的函数
Class cls = Class.forName(classPath);
Class[] parameterType = new Class[] { int[].class };
Method method = cls.getDeclaredMethod(functionName, parameterType);
// 通过 Method.invoke 方法来调用函数
Object object = cls.newInstance();
Object[] arguments = new Object[] { score };
Object result = method.invoke(object,arguments);
// 这段代码执行结束时间
long end =System.nanoTime(); //System.currentTimeMillis(); 314500纳秒
System.out.println(end - start);
// } while (true);
}
//输出学生成绩
static void function1(int[] arr){
System.out.println(Arrays.toString(arr));
}
//查找最高分
static void function2(int[] arr){
int max = arr[0];
for (int i = 1; i < arr.length ; i++) {
if(arr[i] > max) max = arr[i];
}
System.out.println("成绩最高分是" + max);
}
//查找最低分
static void function3(int[] arr){
int min = arr[0];
for (int i = 1; i < arr.length ; i++) {
if(arr[i] < min) min = arr[i];
}
System.out.println("成绩最低分是" + min);
}
//计算平均分
static void function4(int[] arr){
double average = 0 , sum = 0;
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
}
average = sum/arr.length;
DecimalFormat decimalFormat = new DecimalFormat("#.##");
String format = decimalFormat.format(average);
System.out.println("学生平均成绩"+format);
}
//计算不及格人数
static void function5(int[] arr){
int count =0 ;
for (int i = 0; i < arr.length; i++) {
if(arr[i]<60) count++;
}
System.out.println("不及格人数"+count);
}