首页 > 解决方案 > 如何让它显示一个级别的人数,而不是显示每个级别的成绩?

问题描述

所以在我的程序中,我希望它显示每个级别的学生人数(例如,如果两个成绩低于 50,“R 级人数:2”。我遇到的问题是它显示的成绩是每个级别(例如“级别 1 的数字:55”。)而不是说明该级别中有多少个等级。

import java.util.*;
import java.text.*;
import java.math.*;
public class Marks {
    public static void main(String args[]) {
        Scanner in = new Scanner(System.in);
        DecimalFormat format = new DecimalFormat(".0");
        format.setRoundingMode(RoundingMode.HALF_UP);
        // Teachers can choose how many grades they want to enter
        System.out.print("How many student grades would you like to enter:");
        int x = in.nextInt();
        int [] grades = new int[x];
        System.out.print("Enter student marks:\n");
            for (int i = 0; i < x; i++) {
            grades[i] = in.nextInt();
            }
            bubbleSort(grades);
            System.out.println("Sorted grades: "+Arrays.toString(grades));
            classAverage(grades);
            System.out.println("Class average: "+format.format(classAverage(grades))+"%");
            classMax(grades);
            System.out.println("Maximum mark: "+classMax(grades)+"%");
            classMin(grades);
            System.out.println("Minimum mark: "+classMin(grades)+"%");
            // To get the grade range.
            int range = classMax(grades) - classMin(grades);
            System.out.println("Range of marks: "+range+"%");
            classLevel(grades);
    } // Method for finding the class average
      private static double classAverage(int [] grades) {
          int sum = 0;
          for (int g : grades) sum +=g;
          double average = ((double)sum) / grades.length;
          return (average);
      } // Method for finding the highest grade
      private static int classMax(int [] grades) {
          int max = Arrays.stream(grades).max().getAsInt();
          return max;
      } // Method for finding the lowest grade
      private static int classMin(int [] grades) {
          int min = Arrays.stream(grades).min().getAsInt();
          return min;
      } // Method for arranging the grades into levels
      private static void classLevel(int [] grades) {
          for(int i : grades) {
              if(i < 50) {
              System.out.println("Number at Level R: "+i);    
         }  else if((i >= 50)&&(i < 60)) {
              System.out.println("Number at Level 1: "+i);
         }   else if((i >= 60)&&(i <70)) {
                 System.out.println("Number at Level 2: "+i);
         }  else if((i >= 70)&&(i<80)) {
             System.out.println("Number at Level 3: "+i); 
         } else {
              System.out.println("Number at Level 4: "+i);
         }
          }
      } 
        // Method for sorting the grades
        private static void bubbleSort(int[] n) {
        boolean flag;
        do {
            flag = false;
            for (int i = 0; i < n.length - 1; i++) {
                if (n[i] > n[i + 1]) {
                    int temp = n[i];
                    n[i] = n[i + 1];
                    n[i + 1] = temp;
                    flag = true;
                }
            }
        } while (flag);
        }
}

标签: javanetbeans

解决方案


只需使用一个变量来计算每个范围内的数量。然后在最后打印。

private static void classLevel(int [] grades) {
          int levelR = 0;
          int level1 = 0;
          int level2 = 0;
          int level3 = 0;
          int level4 = 0;
          for(int i : grades) {
              if(i < 50) {
              levelR++;    
         }  else if((i >= 50)&&(i < 60)) {
              level1++;
         }   else if((i >= 60)&&(i <70)) {
              level2++;
         }  else if((i >= 70)&&(i<80)) {
             level3++; 
         }  else {
              level4++;
         }
            System.out.println("Number at Level R: "+ levelR);
            System.out.println("Number at Level 1: "+ level1);
            System.out.println("Number at level 2: "+ level2);
            System.out.println("Number at level 3: "+ level3);
            System.out.println("Number at Level 4: "+ level4);
          }


      }

推荐阅读