java吧 关注:1,216,450贴子:12,666,275

【破事水】今天做了一道课后题,大家来集思广益优化一下代码

只看楼主收藏回复

题目:
编程实现:一个有10名学生的班级进行了一次测试。已知每个学生这次测试的成绩(0~100氛围内的整数),求这次测验的班级平均成绩、最高成绩和最低成绩,并统计考试成绩在各分数段的分布率。


IP属地:山东1楼2016-08-12 00:11回复
    我写的代码如下:
    import java.util.Arrays;
    import java.util.Scanner;
    public class ScoreCompare {
    public static void main(String[] args) {
    //1.输入10名同学的成绩
    Scanner scan = new Scanner(System.in);
    int score[] = new int[10];//用来装10名学生的成绩
    int sum = 0;//成绩总和
    double x = 10;//用来计算平均值的
    int m = 0;//不及格<60人数
    int n = 0;//及格 60~70人数
    int l = 0;//良好 70~90人数
    int o = 0;//优秀>90人数
    for(int i = 0; i < score.length; i++){
    System.out.println("请出入第"+(i+1)+"名同学的成绩: ");
    score[i] = scan.nextInt();
    //2.判断输入是否正确
    boolean flag = true;
    while(flag){
    if(score[i] < 0 || score[i] > 100){
    System.out.println("输入错误,请重新输入第"+(i+1)+"名同学的成绩:");
    score[i] = scan.nextInt();
    flag = true;
    }
    flag = false;
    }
    //判断分数段
    if(score[i] < 60 ){
    m++;
    }else if(score[i] >= 60 && score[i] < 70 ){
    n++;
    }else if(score[i] >= 70 && score[i] < 90){
    l++;
    }else{
    o++;
    }
    sum += score[i];
    }
    System.out.println("x="+x);
    Arrays.sort(score);
    //System.out.println(Arrays.toString(score));
    //3.求班级平均分
    System.out.println("班级平均分为:"+sum/x);
    //4.求最高成绩
    System.out.println("最高分为:"+score[score.length-1]);
    //5.求最低成绩
    System.out.println("最低分为:"+score[0]);
    //6.统计成绩在各个分数段的分布率
    System.out.println("不及格的人数有"+m+"人;");
    System.out.println("及格的人数有"+n+"人;");
    System.out.println("良好的人数有"+l+"人;");
    System.out.println("优秀的的人数有"+o+"人;");
    }
    }


    IP属地:山东2楼2016-08-12 00:12
    回复
      第二种:
      import java.util.Arrays;
      import java.util.Scanner;
      public class ScoreCompare {
      public static void main(String[] args) {
      //1.输入10名同学的成绩
      Scanner scan = new Scanner(System.in);
      int score[] = new int[10];//用来装10名学生的成绩
      int sum = 0;//成绩总和
      double x = 10;//用来计算平均值的
      int m = 0;//不及格<60人数
      int n = 0;//及格 60~70人数
      int l = 0;//良好 70~90人数
      int o = 0;//优秀>90人数
      for(int i = 0; i < score.length; i++){
      System.out.println("请出入第"+(i+1)+"名同学的成绩: ");
      score[i] = scan.nextInt();
      //2.判断输入是否正确
      while(score[i] < 0 || score[i] > 100){
      System.out.println("输入错误,请重新输入第"+(i+1)+"名同学的成绩:");
      score[i] = scan.nextInt();
      }
      //判断分数段
      if(score[i] < 60 ){
      m++;
      }else if(score[i] >= 60 && score[i] < 70 ){
      n++;
      }else if(score[i] >= 70 && score[i] < 90){
      l++;
      }else{
      o++;
      }
      sum += score[i];
      }
      System.out.println("x="+x);
      Arrays.sort(score);
      //System.out.println(Arrays.toString(score));
      //3.求班级平均分
      System.out.println("班级平均分为:"+sum/x);
      //4.求最高成绩
      System.out.println("最高分为:"+score[score.length-1]);
      //5.求最低成绩
      System.out.println("最低分为:"+score[0]);
      //6.统计成绩在各个分数段的分布率
      System.out.println("不及格的人数有"+m+"人;");
      System.out.println("及格的人数有"+n+"人;");
      System.out.println("良好的人数有"+l+"人;");
      System.out.println("优秀的的人数有"+o+"人;");
      }
      }


      IP属地:山东3楼2016-08-12 00:13
      回复
        以上两种方法的区别在于注释2判断输入是否正确后面的循环体,到底哪种写法才更好?
        若将其改成递归如何改法?


        IP属地:山东5楼2016-08-12 00:14
        收起回复
          范围?氛围?我来找茬
             千
             年
          梦 往
             、 事
          弹 如 曲
             指 水 已
             间 淡 终 旧
             。 如 、 梦
               烟 人 初
               。 亦 醒
                 散 已
                 。 千
                   年
                   。


          IP属地:广东来自Android客户端7楼2016-08-12 00:22
          收起回复
            不管第一种还是第二种,你那判断语句里面,SCORE>=60以及下一个判定里的大于等于70都是可以不用写的


            IP属地:广东来自Android客户端9楼2016-08-12 00:28
            收起回复
              很简单啊


              来自Android客户端10楼2016-08-12 00:29
              回复
                我更喜欢用while(true){ 输入一个数,if(大于100或者小于0) continue;}手机实在不好打代码,见谅


                IP属地:广东来自Android客户端11楼2016-08-12 00:32
                收起回复
                  第二题:掷6面骰子6000次,统计每个点数出现的概率。


                  IP属地:山东13楼2016-08-12 00:56
                  回复
                    我的代码:
                    public class Statistics {
                    public static void main(String[] args) {
                    int i = 0;//统计1出现的次数
                    int m = 0;//统计2出现的次数
                    int n = 0;//统计3出现的次数
                    int x = 0;//统计4出现的次数
                    int y = 0;//统计5出现的次数
                    int z = 0;//统计6出现的次数
                    int o = 0;
                    for(int j = 0;j<6000;j++){
                    o=(int)(1+Math.random()*6);
                    switch (o) {
                    case 1:
                    i++;
                    break;
                    case 2:
                    m++;
                    break;
                    case 3:
                    n++;
                    break;
                    case 4:
                    x++;
                    break;
                    case 5:
                    y++;
                    break;
                    case 6:
                    z++;
                    break;
                    }
                    }
                    System.out.println("1出现的概率为:"+(double)i/600);
                    System.out.println("2出现的概率为:"+(double)m/6000);
                    System.out.println("3出现的概率为:"+(double)n/6000);
                    System.out.println("4出现的概率为:"+(double)x/6000);
                    System.out.println("5出现的概率为:"+(double)y/6000);
                    System.out.println("6出现的概率为:"+(double)z/6000);
                    }
                    }


                    IP属地:山东14楼2016-08-12 00:57
                    回复
                      求优化


                      IP属地:山东15楼2016-08-12 00:57
                      收起回复
                        直接想到了数组 不知道行不 Arrays.sort


                        16楼2016-08-12 01:09
                        收起回复
                          第三题:掷两个骰子。每个骰子有6面,分别是1~6的点数。当骰子静止之后,计算两个骰子朝上的两个面的点数之和。如果第一次掷骰子时点数和为7或为11,就赢;如果第一次掷骰子时的点数和为2、3或13,就输;如果第一次掷骰子时的点数和是4、5、6、8、9和10,要想赢就继续掷骰子,知道点数与第一次掷出的点数相同,掷出同样的点数之前如果得到了7,就输。


                          IP属地:山东17楼2016-08-12 01:30
                          回复
                            我的代码如下:
                            public class Statistics2 {
                            //掷骰子第二题
                            public static void main(String[] args) {
                            int i = 0;
                            int j = 0;
                            int sum;
                            i=(int)(1+Math.random()*6);
                            j=(int)(1+Math.random()*6);
                            sum = i+j;
                            if(sum == 7 || sum == 11){
                            System.out.println("sum:"+sum);
                            System.out.println("赢");
                            }else if(sum == 2 || sum == 3 || sum == 12){
                            System.out.println("sum:"+sum);
                            System.out.println("输");
                            }else{
                            int sum2 = 0;
                            do{
                            sum2 = (int)(1+Math.random()*6) + (int)(1+Math.random()*6);
                            System.out.println("sum2:"+sum2);
                            System.out.println("sum:"+sum);
                            if(sum2 == 7){
                            System.out.println("输");
                            return;
                            }
                            }while(sum != sum2);
                            System.out.println(":sum2:"+sum2);
                            System.out.println("赢");
                            }
                            }
                            }


                            IP属地:山东18楼2016-08-12 01:31
                            收起回复