好吧所以我正在做一个练习,其中我有一个包含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;
}
}
答案 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