JAVA入门到精通-第27讲-作业讲评
作业:
1、跳水比赛,8个评委打分。运动员的成绩是8个成绩去掉一个最高分,去掉一个最低分,剩下的6个分数的平均分就是最后得分。使用一维数组实现打分功能。
2、请把打最高分的评委和最低分的评委打出来。
//使用ArrayList写的[Demo150.java]
import java.util.*;
public class Demo150 {
public static void main(String[] args) {
Referee rf=new Referee();
try {
while(true){
System.out.println("跳水评分系统");
System.out.println("1、裁判打分");
System.out.println("2、查看得分");
System.out.println("3、查看最高分与最低分");
System.out.println("0、退出");
Scanner sr=new Scanner(System.in);
int num=sr.nextInt();
//裁判打分
if(num==1){
System.out.print("请输入裁判人数:");
int j=sr.nextInt();
for(int i=0;i<j;i++){
System.out.print("请输入第"+(i+1)+"位裁判名字:");
String name=sr.next();
System.out.print(name+"裁判请输入评分:");
float fraction=sr.nextFloat();
Dive dive=new Dive(name,fraction);
rf.addDive(dive);
System.out.println("第"+(i+1)+"位裁判:"+name+"打分为:"+fraction);
}
}
//查看得分
else if(num==2){
rf.View();
}
//查看最高分和最低分
else if(num==3){
rf.Cal();
}
//退出系统
else if(num==0){
System.out.println("已正常退出系统");
System.exit(0);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
//裁判类
class Referee{
private ArrayList<Dive> al=null;
//构造函数,初始化成员变量
public Referee(){
al=new ArrayList<Dive>();
}
//加入裁判
public void addDive(Dive dive){
al.add(dive);
}
//查看选手得分
public void View(){
float allnum=0f,pjnum=0f;
//遍历
for(int i=0;i<al.size()-1;i++){
for(int j=1;j<al.size()-i;j++){
Dive dive1=al.get(j-1);
Dive dive2=al.get(j);
//排序
if(dive1.getFraction()<dive2.getFraction()){
al.set(j, dive1);
al.set(j-1, dive2);
}
}
}
//去掉最高分和最低分,得出选手得分
for(int i=1;i<al.size()-1;i++){
Dive dive=al.get(i);
allnum=dive.getFraction()+allnum;
}
pjnum=allnum/(al.size()-2);
System.out.println("跳水选手得分为:"+pjnum);
}
//找出最高分和最低分
public void Cal(){
//遍历
for(int i=0;i<al.size()-1;i++){
for(int j=1;j<al.size()-i;j++){
Dive dive1=al.get(j-1);
Dive dive2=al.get(j);
//排序
if(dive1.getFraction()<dive2.getFraction()){
al.set(j, dive1);
al.set(j-1, dive2);
}
}
}
//找出最高分与最低分
for(int i=0;i<al.size();i++){
if(i==0){
Dive dive=al.get(i);
System.out.println("打分最高的裁判是:"+dive.getName()+"\t分数为:"+dive.getFraction());
}else if(i==al.size()-1){
Dive dive=al.get(i);
System.out.println("打分最低的裁判是:"+dive.getName()+"\t分数为:"+dive.getFraction());
}
}
}
}
//裁判信息类
class Dive{
private String name;
private float fraction;
public Dive(String name,float fraction){
this.name=name;
this.fraction=fraction;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getFraction() {
return fraction;
}
public void setFraction(float fraction) {
this.fraction = fraction;
}
}
-------------------------------------------------------------------------------
/*1、跳水比赛,8个评委打分。运动员的成绩是8个成绩去掉一个最高分,去掉一个最低分,剩下的6个分数的平均分就是最后得分。使用一维数组实现打分功能。
2、请把打最高分的评委和最低分的评委打出来。(使用一维数组)[Demo150_1]
*/
import java.util.*;
public class Demo150_1 {
public static void main(String[] args) {
Judge judge=new Judge();
System.out.println("得分:"+judge.lastFen());
}
}
class Judge{
//定义一个可以存放8个float类型的数组
float fens[]=null;
int size=8;
//构造函数
public Judge(){
fens=new float[size];
Scanner sr=new Scanner(System.in);
//初始化
try {
for(int i=0;i<fens.length;i++){
System.out.println("请输入第"+(i+1)+"个裁判的成绩:");
fens[i]=sr.nextFloat();
}
} catch (Exception e) {
System.out.println("输入的不是float类型!");
e.printStackTrace();
}finally{
try {
sr.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
//得到最后评分
public float lastFen(){
//3、得到最后分数
float allFen=0;
int minIndex=this.getminFenIndex();
int maxIndex=this.getMaxFenIndex();
//遍历
for(int i=0;i<fens.length;i++){
if(i!=minIndex&&i!=maxIndex){
allFen+=fens[i];
}
}
return allFen/(fens.length-2);
}
//1、去掉最低分(目地就是找到最低分的下标)
public int getminFenIndex(){
//选择法
//认为第一个是最低分
float minFen=fens[0];
int minIndex=0;
for(int i=1;i<fens.length;i++){
if(minFen>fens[i]){
//当minFen大于fens[i]修改最低分minFen
minFen=fens[i];
minIndex=i;
}
}
return minIndex;
}
//2、去掉最高分(目地就是找到最高分的下标)
public int getMaxFenIndex(){
//选择法
//认为第一个是最低分
float maxFen=fens[0];
int maxIndex=0;
for(int i=1;i<fens.length;i++){
if(maxFen<fens[i]){
//当maxFen大于fens[i]修改最低分maxFen
maxFen=fens[i];
maxIndex=i;
}
}
return maxIndex;
}
}
===============================================================================
2、实现一个简单学生成绩管理系统
定义一个数组,用户输入10个同学的成绩,数组下标即代表学生学号
要求:
1、输入学号,打印学生成绩
2、输入成绩,打印学生学号
3、统计各个分数阶段学生人数(不及格,差,中,良,优)
4、输入学号,实现删除学生成绩功能
//ArrayList编写[Demo151.java]
import java.util.*;
public class Demo151 {
public static void main(String[] args) {
Result rs=new Result();
while(true){
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("0、退出系统");
System.out.println("请选择操作:");
Scanner sr=new Scanner(System.in);
int num=sr.nextInt();
if(num==1){
System.out.println("需要录入多少学生成绩:");
int j=sr.nextInt();
for(int i=0;i<j;i++){
System.out.print("请输入第"+(i+1)+"位学生的成绩:");
float Score=sr.nextFloat();
Student student=new Student(Score);
rs.addResult(student);
}
}else if(num==2){
rs.Id();
}else if(num==3){
rs.Score();
}else if(num==4){
rs.Count();
}else if(num==5){
rs.Del();
}else if(num==0){
System.out.println("退出系统");
System.exit(0);
}
}
}
}
class Result{
Scanner sr=new Scanner(System.in);
private ArrayList<Student> al=null;
//构造函数
public Result(){
al=new ArrayList<Student>();
}
//加入成绩
public void addResult(Student student){
al.add(student);
}
//输入入学号,打印学生成绩
public void Id(){
System.out.println("请输入查询学号进行查询:");
int id=sr.nextInt();
for(int i=0;i<al.size();i++){
if(id==i){
Student st=al.get(i-1);
System.out.println("学号为:"+id+"成绩是:"+st.getScore());
}
}
}
//输入成绩,打印学号
public void Score(){
System.out.println("请输入成绩进行查询:");
float Score=sr.nextFloat();
for(int i=0;i<al.size();i++){
if(Score==al.get(i).getScore()){
System.out.println("成绩是:"+Score+"得此成绩的学号为:"+(i+1));
}
}
}
//统计各个分数阶段人数(不及格、及格、中、良、优)
public void Count(){
int a=0,b=0,c=0,d=0,e=0,f=0;
for(int i=0;i<al.size();i++){
if(al.get(i).getScore()==100f&&al.get(i).getScore()>=90f){
a++;
}else
if(al.get(i).getScore()<90f&&al.get(i).getScore()>=80f){
b++;
}else
if(al.get(i).getScore()<80f&&al.get(i).getScore()>=70f){
c++;
}else
if(al.get(i).getScore()<70f&&al.get(i).getScore()>=60f){
d++;
}else
if(al.get(i).getScore()<60f&&al.get(i).getScore()>0){
e++;
}else if(al.get(i).getScore()==0){
f++;
}
}
System.out.println("成绩优有:"+a+"人");
System.out.println("成绩良有:"+b+"人");
System.out.println("成绩中有:"+c+"人");
System.out.println("成绩差有:"+d+"人");
System.out.println("不及格有:"+e+"人");
System.out.println("无成绩有:"+f+"人");
}
//通过学号删除成绩
public void Del(){
System.out.println("请输入要删除成绩的学号:");
int id=sr.nextInt();
id=id-1;
for(int i=0;i<al.size();i++){
if(id==i){
al.set(i, null);
System.out.println("学号是:"+(id+1)+"的成绩已清除");
}
}
}
}
class Student{
private float Score;
public Student(float Score){
this.Score=Score;
}
public float getScore() {
return Score;
}
public void setScore(float score) {
Score = score;
}
}
-------------------------------------------------------------------------------
/*
定义一个数组,用户输入10个同学的成绩,数组下标即代表学生学号
要求:
1、输入学号,打印学生成绩
2、输入成绩,打印学生学号
3、统计各个分数阶段学生人数(不及格,差,中,良,优)
4、输入学号,实现删除学生成绩功能
*/
import java.util.*;
public class Demo151_1 {
private static Scanner sr;
public static void main(String[] args) {
Student sd=new Student();
System.out.println("学生成绩管理系统");
System.out.println("1、通过学号查成绩");
System.out.println("2、通过成绩查学号");
System.out.println("3、统计各阶段学生人数");
System.out.println("4、通过学号删除成绩");
System.out.println("0、退出系统");
System.out.print("请选择操作:");
sr = new Scanner(System.in);
int num=sr.nextInt();
if(num==1){
sd.studentNo();
}else if(num==2){
sd.studentScore();
}else if(num==3){
sd.People();
}else if(num==4){
sd.Del();
}else if(num==0){
System.out.println("已正常退出系统!");
System.exit(0);
}
}
}
class Student{
Scanner sr=new Scanner(System.in);
//定义数组arr
float arr[]=null;
//数组大小
int size=10;
//构造函数
public Student(){
arr=new float[size];
for(int i=0;i<arr.length;i++){
System.out.println("输入第"+(i+1)+"个学生的成绩:");
arr[i]=sr.nextFloat();
}
}
//输入学号查询成绩
public void studentNo(){
System.out.println("请输入学号:");
int No=sr.nextInt();
System.out.println("学号为"+No+"的学生成绩是:"+arr[No-1]);
}
//通过成绩查学号
public void studentScore(){
System.out.println("请输入学生成绩:");
float Score=sr.nextFloat();
for(int i=0;i<arr.length;i++){
if(Score==arr[i]){
System.out.println("学生成绩为:"+Score+"的学号为:"+(i+1));
}
}
}
//统计各个分数阶段学生人数
public void People(){
int a=0,b=0,c=0,d=0,e=0,f=0;
for(int i=0;i<arr.length;i++){
if(arr[i]==100f&&arr[i]>=90f){
a++;
}else if(arr[i]<90f&&arr[i]>=80f){
b++;
}else if(arr[i]<80f&&arr[i]>=70f){
c++;
}else if(arr[i]<70f&&arr[i]>=60f){
d++;
}else if(arr[i]<60f&&arr[i]>0){
e++;
}else if(arr[i]==0){
f++;
}
}
System.out.println("成绩优有:"+a+"人");
System.out.println("成绩良有:"+b+"人");
System.out.println("成绩中有:"+c+"人");
System.out.println("成绩差有:"+d+"人");
System.out.println("不及格有:"+e+"人");
System.out.println("无成绩有:"+f+"人");
}
//删除学生成绩
public void Del(){
System.out.println("请输入要删除成绩的学号:");
int No=sr.nextInt();
System.out.println("学号为"+No+"的学生原成绩为:"+arr[No]);
System.out.println("学号为"+No+"的学生成绩已清"+(arr[No]=0));
}
}
-------------------------------------------------------------------------------
3、三个同学考试,共考三门课:语文、数学、英语。使用二维整数数组存放三个同学的学号和所有考试成绩。
学号 语文 数学 英语
1002 78 92 76
1003 67 88 80
1007 90 95 80
//程序示例[Demo152.java]
public class Demo152 {
public
static void main(String[] args) {
//定义一个二维整数数组并初始化赋值
int
stus[][]={{1002,78,92,76},{1003,67,88,80},{1007,90,95,80}};
//也可以下面的方法(不建议使用,效率太慢)
int
stus2[][]=new int[3][4];
stus2[0][0]=1002;
stus2[1][0]=1003;
stus2[2][0]=1007;
stus2[0][1]=78;
stus2[1][1]=67;
stus2[2][1]=90;
stus2[0][2]=92;
stus2[1][2]=88;
stus2[2][2]=95;
stus2[0][3]=76;
stus2[1][3]=80;
stus2[2][3]=80;
for(int
i=0;i<3;i++){
for(int
j=0;j<4;j++){
System.out.print(stus[i][j]+"\t");
}
System.out.println();
}
System.out.println();
for(int
i=0;i<3;i++){
for(int
j=0;j<4;j++){
System.out.print(stus2[i][j]+"\t");
}
System.out.println();
}
}
}
-------------------------------------------------------------------------------
4、1、跳水比赛,8个评委打分。运动员的成绩是8个成绩去掉一个最高分,去掉一个最低分,剩下的6个分数的平均分就是最后得分。使用一维数组实现打分功能。
2、请把打最高分的评委和最低分的评委打出来。
3、找出最佳评委和最差评委。最佳评委就是打分和最后得分最接近的评委。最差评委就是打分和最后得分相差最大的。[Demo153.java]
import java.util.*;
public class Demo153 {
public
static void main(String[] args) {
Judge
judge=new Judge();
System.out.println("得分:"+judge.lastFen());
System.out.println("打分最差的是裁判是:"+(judge.getWorst()+1));
System.out.println("打分最好的是裁判是:"+(judge.getBest()+1));
}
}
class Judge{
//定义一个可以存放8个float类型的数组
float
fens[]=null;
int
size=3;//定义几个裁判
//构造函数
public
Judge(){
fens=new
float[size];
Scanner
sr=new Scanner(System.in);
//初始化
try
{
for(int
i=0;i<fens.length;i++){
System.out.println("请输入第"+(i+1)+"个裁判的成绩:");
fens[i]=sr.nextFloat();
}
}
catch (Exception e) {
System.out.println("输入的不是float类型!");
e.printStackTrace();
}finally{
try
{
sr.close();
}
catch (Exception e2) {
e2.printStackTrace();
}
}
}
//得到打分最差评委
public
int getWorst(){
float
lastFen=this.lastFen();
float
tempCai=0f;
//我认为第一个评委打分是最差的
int
worstIndex=0;
float
cai=Math.abs(fens[0]-lastFen);//使用Math来返回一个数学绝对值
for(int
i=1;i<fens.length;i++){
tempCai=Math.abs(fens[i]-lastFen);
if(cai<tempCai){
worstIndex=i;
cai=tempCai;
}
}
return
worstIndex;
}
//得到打分最好评委
public
int getBest(){
float
lastFen=this.lastFen();
float
tempHao=0f;
//我认为第一个评委打分是最好的
int
bestIndex=0;
float
hao=Math.abs(fens[0]-lastFen);//使用Math来返回一个数学绝对值
for(int
i=1;i<fens.length;i++){
tempHao=Math.abs(fens[i]-lastFen);
if(hao>tempHao){
bestIndex=i;
hao=tempHao;
}
}
return
bestIndex;
}
//得到最后评分
public
float lastFen(){
//3、得到最后分数
float
allFen=0;
int
minIndex=this.getminFenIndex();
int
maxIndex=this.getMaxFenIndex();
//遍历
for(int
i=0;i<fens.length;i++){
if(i!=minIndex&&i!=maxIndex){
allFen+=fens[i];
}
}
return
allFen/(fens.length-2);
}
//1、去掉最低分(目地就是找到最低分的下标)
public
int getminFenIndex(){
//选择法
//认为第一个是最低分
float
minFen=fens[0];
int
minIndex=0;
for(int
i=1;i<fens.length;i++){
if(minFen>fens[i]){
//当minFen大于fens[i]修改最低分minFen
minFen=fens[i];
minIndex=i;
}
}
return
minIndex;
}
//2、去掉最高分(目地就是找到最高分的下标)
public
int getMaxFenIndex(){
//选择法
//认为第一个是最低分
float
maxFen=fens[0];
int
maxIndex=0;
for(int
i=1;i<fens.length;i++){
if(maxFen<fens[i]){
//当maxFen大于fens[i]修改最低分maxFen
maxFen=fens[i];
maxIndex=i;
}
}
return
maxIndex;
}
}