【问题标题】:GradeBook Java Program. Help calling class?成绩簿 Java 程序。帮忙打电话上课?
【发布时间】:2015-01-09 20:00:05
【问题描述】:

任务如下。

一位老师有五个学生参加了四次考试。教师根据学生的四次考试成绩的平均值,使用以下等级量表为学生分配一个字母等级。

90-100:  A
80-79:  B
70-79:  C
60-69:  D
0-59:  F

编写一个类,该类在 arraylist 对象上使用 String 数组来保存五个学生的姓名,一个由五个字符组成的数组来保存五个学生的字母成绩,以及五个数组,每个数组四个 doubles 来保存每个学生的集合考试分数。该类应具有返回学生姓名、平均考试成绩和基于平均成绩的字母成绩的方法。

在允许用户输入每个学生的姓名和他或她的四个测试分数的程序中演示课程。然后它应该显示每个学生的平均考试成绩和字母成绩。

程序不应接受低于 0 或高于 100 的分数

以下代码在这里:

学生班:

public class Student{
    private String name;
    private double[] test = new double[4];


    public Student(){
        name = " ";
    }

    public Student(String n, double[] t){
        name = n;
        test = t;
    }

    public void setName(String n)
    {
        name = n;
    }

    public String getName(){
        return name;
    }

    public void setTest(double t,int i)
    {
        test[i] = t;
    }

    public double getTest(int i)
    {
        return test[i];
    }


    public double getTestAvg(){

        double sum = 0;
        double avg;
        for(int i = 0; i < test.length; i++)
        {
            sum += test[i];
        }
         avg = sum / test.length;
         return avg;
    }

    public char getLetterGrade(){

        double average = getTestAvg();
        char grade=0;

        if(average >= 90)
            grade = 'A';
        else if (average >= 80)
            grade = 'B';
        else if (average >= 70)
            grade = 'C';
        else if (average >=60)
            grade = 'D';
        else if (average < 60)
            grade = 'F';

        return grade;
    }

    public String toString(){
        String str = "";
        str += "\nName of student: " + name;
        str += "\nAverage test score: " + getTestAvg();
        str += "\nLetter grade: " + getLetterGrade();
        return str;
    }
}       

主程序:

import java.util.Scanner;
import java.io.*;

public class GradeBook {

    public static void main(String[] args) throws IOException {

        Student[] students = new Student[5];

        getStudentData(students);

    }

    public static double getStudentData(Student[] array) {
        Scanner scan = new Scanner(System.in);
        String[] student = new String[5];
        double[] test = new double[4];
        for (int i = 0; i < student.length; i++) {
            System.out.println("Enter the name of the student : ");
            student[i] = scan.nextLine();
            for (int j = 0; j < test.length; j++) {
                System.out.println("Enter score " + (j + 1) + " for the student");
                test[j] = scan.nextDouble();
                scan.nextLine();
            }
            array[i] = new Student(student[i], test);

        }
        return 0;

    }
}

问题是,我可以输入所有信息,但是输入所有数字后什么都不会显示。任何帮助将不胜感激!

【问题讨论】:

  • 你卡在哪里了?你调试过代码吗? (在开头的某处放置一个断点,然后单步执行,看看它通向哪里)。
  • 您需要做的第一件事是获得一个 IDE(Eclipse、NetBeans 等)。然后学习如何使用调试器,一次一行地逐步执行代码,检查每一步的变量值,直到你发现它没有按照你的预期运行。您应该在此处发布之前先执行此操作,并且仅在调试时您无法理解问题时发布。请务必解释您在调试期间发现的内容。就目前而言,这个问题确实离题了,因为它可以概括为代码转储加上“这不起作用”。
  • 没有任何错误。我使用日食。只是我不知道如何让程序调用其他课程,以便提高课程分数/成绩。
  • 您的代码中没有要打印的内容。您似乎确实知道如何通过System.out.println 向用户输出,所以您是否尝试过迭代新的学生数组并将某些内容打印到字符串?您究竟希望展示什么?
  • 在顶部显示成绩。我希望在代码末尾创建一个数组列表,以数组形式显示学生姓名,后跟他们的字母等级。

标签: java arrays class public


【解决方案1】:

您没有看到任何显示的内容,因为您从未调用显示任何内容。 您正在填充“数组”,因此您现在需要对其进行迭代。

在外部 for 循环(第一个)之后,您需要遍历填充的数组并打印出学生对象。这将起作用,因为您已经有一个 toString() 方法。

例如:

for(Student student : array)
{
    System.out.println(student);
}

【讨论】:

  • 感谢您的回复!很高兴您能理解,但问题是,我将如何在代码中执行此操作?
  • @KennyBowen 查看 scrappedcola 的评论
  • 嗯,像for each student in students { System.out.println(student); } 这样的东西不够吗?
猜你喜欢
  • 1970-01-01
  • 2013-12-19
  • 2021-11-29
  • 2020-02-10
  • 2014-02-17
  • 2019-09-18
  • 2011-07-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多