打赏

JAVA入门到精通-第27讲-作业讲评

 这样处理,size更为灵活;
  

找到最低分关键是找到相关分数下标;
 
 这样更为灵活一点;

 
 关闭br流:br.close( );
 finally保证能关闭;
 把整个for循环放在try...catch...块里面去;
 退出for循环之后才finally.
 
 这样子把学生删掉了,把需要删掉的数组变为0就可以了
  int  stus[3][4]
 
 定义一个3行4列的数组;
 初始化不需要赋值;
 int stus[ ][ ] 
 
 得到最菜评委需要最后得分;
  
 abs返回绝对值;
  
 float  cai=Math.abs(fens[0]-lastFen);
  cai越大,评委越菜;
 函数栈开辟的越少越好;

作业:

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{

    //定义一个可以存放8float类型的数组

    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();

        }

    }

}

-------------------------------------------------------------------------------

41、跳水比赛,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{

    //定义一个可以存放8float类型的数组

    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;

    }

}

 
 
 



















posted on 2018-11-30 15:13  XuCodeX  阅读(218)  评论(0编辑  收藏  举报

导航