编辑代码

import javax.swing.*;
import java.awt.*;
import java.util.*;

/**
 * 成绩计算
 */
public class HistogramPanel extends JPanel {
    static final Color[] c = new Color[]{Color.MAGENTA,Color.blue,Color.RED,Color.GREEN,Color.pink};
    static final String[] str = new String[]{"90 - 100","80 - 89","70 - 79","60 - 69","0 - 59"};
    static int[] num = new int[5];
    @Override
    protected void paintComponent(Graphics g) {
        int frameHeight = getHeight();
        int frameWidth = getWidth();
        String font = "宋体";
        int width = 60;
        int height = 4;
        g.setColor(Color.white);
        g.fillRect(0, 0, frameWidth, frameHeight);
        g.setColor(Color.BLACK);
        g.setFont(new Font(font, 1, 20));
        g.setColor(Color.GRAY);
        for(int i = 150;i >= 30;i-=20){
            g.drawLine(frameWidth / 2 - 210, frameHeight / 3 + i, frameWidth / 2 + 210, frameHeight / 3 + i);
        }
        g.setColor(Color.BLACK);
        g.setFont(new Font(font, 0, 12));
        String s;
        for(int i = 0;i <= 6;i++){
            s = "";
            s += 30 - 5*i;
            g.drawString(s, frameWidth / 2 - 228, frameHeight / 3 + 35 + i*20);
        }
        int initHeight = frameHeight / 3 + 150;
        int initWidth = frameWidth / 2 - 200;
        for (int i = 0; i < 5; i++) {
            int h = num[i];
            g.setColor(c[i]);
            g.fillRect(initWidth + i * (width + 20), initHeight - h * height, width, h * height);
            g.fillRect(initWidth + 20 +  i * (width + 10), initHeight + 20, 8, 8);
            g.setColor(Color.BLACK);
            g.drawString(str[i], initWidth + 30 +  i * (width + 10), initHeight + 28);
        }
    }
    public static void main(String[] args) {
        JFrame frame;
        Scanner sc = new Scanner(System.in);
        int temp,res,max,min,cnt,jg;
        while(true){
            System.out.println("=========请输入一组数据============");
            System.out.println("数据输入完成后,输入 任意负数 并 敲回车");
            frame = new JFrame();
            Arrays.fill(num,0);
            res = 0;
            max = 0;
            min = 100;
            cnt = 0;
            jg = 0;
            while(sc.hasNext()){
                temp = sc.nextInt();
                if(temp < 0)break;
                if(temp <= 100 && temp >= 90){
                    num[0]++;
                }else if(temp < 90 && temp >= 80){
                    num[1]++;
                }else if(temp < 80 && temp >= 70){
                    num[2]++;
                }else if(temp < 70 && temp >= 60){
                    num[3]++;
                }else if(temp < 60 && temp >= 0){
                    num[4]++;
                }
                cnt++;
                max = Math.max(max,temp);
                min = Math.min(min,temp);
                res += temp;
            }
            for(int i = 0;i < 4;i++)jg += num[i];
            System.out.println("=============结果================");
            for(int i = 0;i < 5;i++){
                System.out.println("分数段: " + str[i] + "\t人数: " + num[i] + "\t百分比: " + String.format("%.2f",num[i]*100.0/cnt) + "%");
            }
            System.out.println("最高分: " + max);
            System.out.println("最低分: " + min);
            System.out.println("平均分: " + String.format("%.2f",res*1.0/cnt));
            System.out.println("及格率: " + String.format("%.2f",jg*100.0/cnt) + "%");
            System.out.println("=================================");
            frame.getContentPane().add(new HistogramPanel());
            frame.setSize(800, 600);
            frame.setVisible(true);
            System.out.println("请输入任意字符,回车后继续");
            String s = sc.next();
            System.out.println("*******本组数据计算结束*******");
        }
    }
}