【问题标题】:Java - Printing n times a string which is included in an ArrayList of objectsJava - 打印 n 次包含在对象 ArrayList 中的字符串
【发布时间】:2020-10-18 16:59:37
【问题描述】:

我正在做一个练习,要求用户输入一个整数(点),直到用户输入为 -1。然后它要我显示这些分数的平均值、及格分数的平均值(那些> 50)、及格百分比,最后是我面临的问题部分的成绩分布。

Grade Distribution 部分基本上根据每个输入的点数奖励从 0 到 5 的等级。例如,输入整数 50 &&

经过数小时的尝试,我设法解决了这个问题,但可能是有史以来最不可靠的方式。我有三个java文件。一份用于主班,一份用于班级积分,一份用于班级成绩。在 Grades 类中,我只有两个实例变量,一个 string(stars) 和一个整数等级。在我计算平均值等的 Points 类中,我还创建了一个新的 ArrayList,并通过我在主程序中调用的名为 createFiveGrades 的方法添加了 5 个单独的 Grades 对象。然后通过 pointsToGrade 方法(我再次在 main 中调用)我将积分转换为等级,并在适用时在上述 ArrayList 的对象中添加星号。 班级积分:

public class Points {

    private int points;
    private int counter;
    private int passingPoints;
    private int passingCounter;
    private ArrayList<Grades> distr;

    public Points() {
        this.points = 0;
        this.counter = 0;
        this.passingPoints = 0;
        this.passingCounter = 0;
        this.distr = new ArrayList();
    }

    public void addPoints(int points) {
   //code
    }

    public double totalPointsAverage() {
        //code
    }

    public int getPassingPoints() {
        //code
    }

    public double passingPointsAverage() {

        //code

    }

    public double passPercentage() {
        //code
    }

    public void createFiveGrades() {
        this.distr.add(new Grades());
        this.distr.get(0).setGrade(0);
        this.distr.add(new Grades());
        this.distr.get(1).setGrade(1);
        this.distr.add(new Grades());
        this.distr.get(2).setGrade(2);
        this.distr.add(new Grades());
        this.distr.get(3).setGrade(3);
        this.distr.add(new Grades());
        this.distr.get(4).setGrade(4);
        this.distr.add(new Grades());
        this.distr.get(5).setGrade(5);
    }

    public void pointsToGrade(int po) {

        if (po < 50) {
            this.distr.get(0).addStars("*");
        } else if (po >= 50 && po < 60) {
            this.distr.get(1).addStars("*");
        } else if (po >= 60 && po < 70) {
            this.distr.get(2).addStars("*");
        } else if (po >= 70 && po < 80) {
            this.distr.get(3).addStars("*");
        } else if (po >= 80 && po < 90) {
            this.distr.get(4).addStars("*");
        } else if (po >= 90 && po <= 100) {
            this.distr.get(5).addStars("*");
        }

    }

    public ArrayList<Grades> distribution() {
        return this.distr;
    }

班级成绩:


public class Grades {

    private int grade;
    private String stars;

    public Grades() {
        this.grade = 0;
        this.stars = "";

    }

    public void setGrade(int n) {
        this.grade = n;
    }

    public void addStars(String str) {
        this.stars += str;
    }

    public String toString() {
        return this.grade + ": " + stars;
    }

}

主要:

public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Points points = new Points();
        points.createFiveGrades();

        System.out.println("Enter points in totals, -1 stops:");
        while (true) {

            int input = Integer.valueOf(scanner.nextLine());
            if (input == -1) {
                System.out.println("Point average (all): " + points.totalPointsAverage());
                if (points.getPassingPoints() > 0) {
                    System.out.println("Point average (passing): " + points.passingPointsAverage());
                } else {
                    System.out.println("Point average (passing): -");
                }
                System.out.println("Pass percentage: " + points.passPercentage());
                System.out.println("Grade distribution: ");
                for (int i=points.distribution().size()-1; i>=0;  i--) {
                    System.out.println(points.distribution().get(i));
                }
                break;
            } else if (input >= 0 && input <= 100) {
                points.addPoints(input);
                points.pointsToGrade(input);

            }

问题:还有哪些其他方式可以更好地实施该计划的成绩分配功能?请不要给我解决方案,而是要考虑的事情。谢谢!

【问题讨论】:

    标签: java string object


    【解决方案1】:

    您可以简单地使用从成绩(整数)到该成绩出现次数(整数)的映射,而不是为成绩使用自定义类。然后,您可以仅在打印时根据地图中存储的值构建星形字符串。

    【讨论】:

    • 感谢您的回复!在这门课程中,我没有学过地图,因此他们希望我能找到一种没有它的方法来解决它。还有其他建议吗?再次感谢!
    猜你喜欢
    • 2014-12-11
    • 1970-01-01
    • 2010-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-24
    • 2016-01-03
    • 2016-07-14
    相关资源
    最近更新 更多