Java为什么我需要这个方法以及如何使用它

时间:2015-11-18 19:40:05

标签: java

这是我的Java类的赋值,问题如下:

修改本章中提供的学生课程,如下所示。每个学生对象还应包含三个测试的分数。提供一个构造函数,根据参数值设置所有实例值。重载构造函数,使得假定每个测试疮最初为零。提供一个名为setTestScore的方法,它接受两个参数:测试编号(1到3)和分数。还提供了一个名为getTestScore的方法,它接受测试编号并返回适当的分数。提供一种名为average的方法,用于计算并返回该学生的平均考试成绩。修改toString方法,使得测试分数和平均值包含在学生的描述中。修改驱动程序类main方法以运用新的Student方法。

所以我得到了运行的程序,我得到了正确的输出。我的问题是为什么我需要方法getTestScore。我没有使用它来获得正确的输出。我的代码目前的编写方式是否有缺陷,或者我只是“需要”它来满足作业?

这是我的代码:
StudentBody.java

public class StudentBody 
{
    //-------------------------------------------------------------------
    //  Creates some Address and Student objects and prints them.
    //-------------------------------------------------------------------
    public static void main(String[] args)
    {
        Address school = new Address("800 Lancaster Ave.", "Villanova", "PA", 19085);

        Address jHome = new Address("21 Jump Street", "Blacksburg", "VA", 24551);

        Student john = new Student("John", "Smith", jHome, school);

        Address mHome = new Address("123 Main Street", "Euclid", "OH", 44132);

        Student marsha = new Student("Marsha", "Jones", mHome, school);

        john.setTestScore(1, 93);
        john.setTestScore(2, 86);
        john.setTestScore(3, 77);
        john.average();

        marsha.setTestScore(1, 82);
        marsha.setTestScore(2, 91);
        marsha.setTestScore(3, 97);
        marsha.average();

        System.out.println(john);
        System.out.println();
        System.out.println(marsha);
    }

}

Student.java

    public class Student 
    {
        private String firstName, lastName;
        private Address homeAddress, schoolAddress;
        private int test1, test2, test3;
        private double averageScore;

        //-------------------------------------------------------------------
        // Constructor: Sets up this student with the specified values.
        //-------------------------------------------------------------------
        public Student(String first, String last, Address home, Address school)
        {
            firstName = first;
            lastName = last;
            homeAddress = home;
            schoolAddress = school;
            test1 = 0;
            test2 = 0;
            test3 = 0;
        }

        //-------------------------------------------------------------------
        // Sets the test scores
        //-------------------------------------------------------------------
        public void setTestScore(int testNumber, int testScore)
        {
            switch(testNumber)
            {
                case 1:
                    test1 = testScore;
                    break;

                case 2:
                    test2 = testScore;
                    break;

                case 3:
                    test3 = testScore;
                    break;

                default:
                    return;

            }
        }

        //-------------------------------------------------------------------
        // Gets the test scores
        // Not sure why I should call this method
        //-------------------------------------------------------------------
        public int getTestScore(int testNumber)
        {
            switch(testNumber)
            {
                case 1:
                    return test1;

                case 2:
                    return test2;

                case 3:
                    return test3;

                default:
                    return 0;

            }
        }

        //-------------------------------------------------------------------
        // Averages the test scores
        //-------------------------------------------------------------------
        public void average()
        {
            averageScore = (test1 + test2 + test3)/3;
            return;
        }

        //-------------------------------------------------------------------
        // Returns a string description of this Student object.
        //-------------------------------------------------------------------
        public String toString()
        {
            String result;

            result = firstName + " " + lastName + "\n";
            result += "Home Address:\n" + homeAddress + "\n";
            result += "School Address:\n" + schoolAddress +"\n";
            result += "Test Scores:\n";
            result += "Test #1: " + test1 + "\n";
            result += "Test #2: " + test2 + "\n";
            result += "Test #3: " + test3 + "\n";
            result += "Average Score: " + averageScore ;

            return result;
        }

    }

Address.java

public class Address 
{
    private String streetAddress, city, state;
    private long zipCode;

    //-------------------------------------------------------------------
    // Constructor: Sets up this address with the specified data.
    //-------------------------------------------------------------------
    public Address(String street, String town, String st, long zip)
    {
        streetAddress = street;
        city = town;
        state = st;
        zipCode = zip;
    }

    //-------------------------------------------------------------------
    // Returns a description of this Address object.
    //-------------------------------------------------------------------
    public String toString()
    {
        String result;

        result = streetAddress + "\n";
        result += city + ", " + state + " " + zipCode;

        return result;
    }

}

我的输出:

约翰史密斯 家庭地址: 21跳街 布莱克斯堡,弗吉尼亚州24551 学校地址: 800 Lancaster Ave. Villanova,PA 19085 测试成绩: 测试#1:93 测试#2:86 测试#3:77 平均得分:85.0

马莎琼斯 家庭地址: 123 Main Street Euclid,OH 44132 学校地址: 800 Lancaster Ave. Villanova,PA 19085 测试成绩: 测试#1:82 测试#2:91 测试#3:97 平均得分:90.0

3 个答案:

答案 0 :(得分:1)

我很想使用数组而不是每个测试都有单独的变量。你的班级是否处理过阵列? ArrayList可能非常有用,特别是在更接近真实世界场景的地方,测试的数量可以改变。

使用数组时,实际上你有一个很好的getScore(int testID)用例。您可以在循环中使用此方法,该循环遍历数组中的所有分数以获取用于计算平均值的分数。

P.S。为什么人们会对这个问题进行投票,然后没有说明他们这样做的原因?在我看来,OP并不是在寻求解决方案或帮助做功课,只是想获得一些见解。

答案 1 :(得分:1)

你是正确的,没有被使用。但你似乎错过了一项要求:

  

修改驱动程序类main方法以运用新的Student方法。

这至少对我来说意味着你应该在main()方法的某个地方调用你添加的方法(包括getter)。

它完全是语义学的论证,并且从各个方面来说都不重要。

然而 ...争论不重要事物的语义并编写不必要的代码来满足独立主管编写的任意要求对于任何进入劳动力市场的人来说都是一个令人惊讶的适当的教训开发者。因此,请将其视为一课,编写代码,然后继续。

答案 2 :(得分:0)

您只是为了满足作业而使用它。没有必要成为那里的吸气者。