• 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()+" 分数为:"+dive.getFraction());

                }else if(i==al.size()-1){

                    Dive dive=al.get(i);

                    System.out.println("打分最低的裁判是:"+dive.getName()+" 分数为:"+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]+" ");

                }

                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]+" ");

                }

                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;

        }

    }

     
     
     



















  • 相关阅读:
    MSP430:实时时钟-DS1302
    STM32: TIMER门控模式控制PWM输出长度
    LVM磁盘管理
    python的面向对象,类,以及类的使用
    pymysql模块
    paramiko模块
    正则表达式和re模块
    python3的soker模块实现功能
    根据生日测星座
    多进程,进程池,协程
  • 原文地址:https://www.cnblogs.com/xuxaut-558/p/10044321.html
Copyright © 2020-2023  润新知