Java 带参数的Setter函数

Java 带参数的Setter函数,java,set,setter,Java,Set,Setter,好的,我在做一个练习,我有一个包含3个测试分数的对象 然后我有一个set函数,它有两个参数,测试编号和你为它设置的分数 现在我的问题是,我不知道如何使testnumber参数正确工作 如果我执行test1=score,则代码可以工作,但当我将student1.test1放入set参数时,由于某种原因它不会注册 我希望你能给我指出正确的方向,我将非常感激 我有一个主班和一个学生班: public class Main { public static void main(String[] a

好的,我在做一个练习,我有一个包含3个测试分数的对象

然后我有一个set函数,它有两个参数,测试编号和你为它设置的分数

现在我的问题是,我不知道如何使testnumber参数正确工作

如果我执行
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;
    }
}

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;
    }
    ...
}

你最好把
test
作为一个单独的类。我建议你把student类中的int设为private,在构造函数中声明变量。基本思想是错误的。你不能这样改变价值,这是行不通的。如果测试是由整数索引的,则使用
映射
@boristspider或ArrayListanyways@BoristheSpider是的,我刚刚添加了一个例子来说明这个问题。在这个例子中,通过值的声明是否重要,因为传递给方法的值是一个原始的而不是对对象的引用?@ BOT其他语言,如C和C++,允许传递对任何变量的引用,所以我假设这就是OP的原因mistake@Eran很公平。尽管如此,如果我们将这个问题的范围仅限于Java(因为它被标记为相同的),那么它将需要对OP进行不同的解释。
student1.setTestScore(0, 50); // note that valid test numbers would be 0,1 and 2