带参数的Setter函数

时间:2015-03-13 14:03:05

标签: java set setter

好吧所以我正在做一个练习,其中我有一个包含3次测试分数的对象。

然后我有一个set-function,它接受2个参数,测试编号和你设置的分数。

现在我的问题是我不知道如何使测试号参数正常工作。

如果我test1 = score,代码可以工作,但是当我将student1.test1放入set参数时,由于某种原因它没有注册。

我希望你能指出我正确的方向,我真的很感激!

我有一个主要班级和一个学生班级:

public class Main {
    public static void main(String[] args) {
        Student student1 = new Student();
        student1.setTestScore(student1.test1, 50);
        System.out.print(student1.test1);
    }
}

public class Student {
    int test1;
    int test2 = 0;
    int test3;

    Student() { 
        int test1 = 0;
        int test2 = 0;
        int test3 = 0;    
    }

    public void setTestScore(int testNumber, int score){
        testNumber = score;
    }
}

1 个答案:

答案 0 :(得分:3)

Java是一种按值传递的语言,因此当您将student1.test1传递给student1.setTestScore时,您传递的是该成员的副本。您没有传递对该成员的引用。因此,该方法无法更改成员的值。

即使语言允许这样的修改,在面向对象编程方面也是一个坏主意,因为你通常会将成员设为私有,而不是直接从课外访问它们。

可能的替代方法是使用数组:

public class Student {
    int[] test = new int[3];
    ...

    public void setTestScore(int testNumber, int score){
        if (testNumber >= 0 && testNumber < test.length)
            test[testNumber]=score;
    }
    ...
}

你可以这样调用这个方法:

student1.setTestScore(0, 50); // note that valid test numbers would be 0,1 and 2