按照学习计划,基础语法不久就要告一段落,马上将开启面向对象的全新领域。给自己过去的一段时间学到的知识做了全面的总结,设计出了如下系统,尽可能涵盖所学到的知识点。为接下来面向对象的学习筑牢基础。
?* 能够对任意数量的同学的成绩进行录入
?* 能够实现多次求最大值、最小值和平均值的操作
?*尽可能的涵盖输入输出、循环和分支结构、数组等这段时间学习? ? ? 过的知识点
源码如下:
/**
* 使用之前学习的内容完成对一个班同学成绩进行简单的计算
* 能够对任意数量的同学的成绩进行录入
* 能够实现多次求最大值、最小值和平均值的操作
*/
import java.util.Arrays;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
//用数组接收用户输入一串数字
int[] num = new int[0];
int i = 0;
System.out.println("请输入学生成绩");
do {
System.out.println("请输第"+(i+1)+"同学的成绩,输入0结束录入");
int a = input.nextInt();
if(a==0) {
break;
}
num = Arrays.copyOf(num, num.length+1);
num[i] = a;
++i;
}while(i>0);
//接收用户输入的数据进行相应的操作
int a;
do {
System.out.println("请选择您要进行的操作");
System.out.println("1、计算高分、2、计算最低分、3、计算平均成绩 0、结束");
a = input.nextInt();
switch(a) {
case 0:
break;
case 1:
System.out.println("最高成绩为"+maxNum(num));
break;
case 2:
System.out.println("最低成绩为"+minNum(num));
break;
case 3:
System.out.println("平均成绩为"+avgNum(num));
break;
default:
System.out.println("请按照要求进行操作!");
break;
}
}while(a!=0);
System.out.println("THE END");
}
//计算最大值
public static int maxNum(int[] arr) {
int max = arr[0];
for(int i = 0;i<arr.length;i++) {
if(max<arr[i]) {
max = arr[i];
}
}
return max;
}
//计算最小值
public static int minNum(int[] arr) {
int min = arr[0];
for(int i = 0;i<arr.length;i++) {
if(min>arr[i]) {
min = arr[i];
}
}
return min;
}
//计算平均值
public static double avgNum(int[] arr) {
int sum = 0;
for(int i = 0;i < arr.length;i++) {
sum += arr[i];
}
return sum/(double)(arr.length);
}
}
其中main方法主要实现成绩的录入,以及接收用户的输入调用方法完成对数据的操作
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
//用数组接收用户输入一串数字
int[] num = new int[0];
int i = 0;
System.out.println("请输入学生成绩");
do {
System.out.println("请输第"+(i+1)+"同学的成绩,输入0结束录入");
int a = input.nextInt();
if(a==0) {
break;
}
num = Arrays.copyOf(num, num.length+1);
num[i] = a;
++i;
}while(i>0);
//接收用户输入的数据进行相应的操作
int a;
do {
System.out.println("请选择您要进行的操作");
System.out.println("1、计算高分、2、计算最低分、3、计算平均成绩 0、结束");
a = input.nextInt();
switch(a) {
case 0:
break;
case 1:
System.out.println("最高成绩为"+maxNum(num));
break;
case 2:
System.out.println("最低成绩为"+minNum(num));
break;
case 3:
System.out.println("平均成绩为"+avgNum(num));
break;
default:
System.out.println("请按照要求进行操作!");
break;
}
}while(a!=0);
System.out.println("THE END");
}
其中略复杂的是要根据每次的输入动态增加数组的长度,可用copyOf来增加变量的长度赋值给原本的数组,代码为
num = Arrays.copyOf(num, num.length+1);
接下来就是通过编写静态方法来分别实现查找最高分、最低分、平均分
//计算最高分
public static int maxNum(int[] arr) {
int max = arr[0];
for(int i = 0;i<arr.length;i++) {
if(max<arr[i]) {
max = arr[i];
}
}
return max;
}
//计算最低分
public static int minNum(int[] arr) {
int min = arr[0];
for(int i = 0;i<arr.length;i++) {
if(min>arr[i]) {
min = arr[i];
}
}
return min;
}
//计算平均分
public static double avgNum(int[] arr) {
int sum = 0;
for(int i = 0;i < arr.length;i++) {
sum += arr[i];
}
return sum/(double)(arr.length);
}
其中平均分为了准确建议转换为”double“型变量,规范点还可以保留两位小数(我在这里没有保留)
测试样例如下
?
?
?优化建议:
求平均值时可以保留两位小数,接收用户的操作那一段可以通过编写静态方法实现,要考虑有学渣得0分的情况可以把”输入0结束录入“改为”输入负数结束录入“改一下循环条件即可。
请雅清同学过目!
|