如何对多个实例变量使用 1 setter

How to use 1 setter for multiple instance variables

所以,我正在尝试为一个构造函数的多个实例变量创建一个 setter 方法。我已经制作了一个以这种方式工作的 getter:

public int getQuiz(int num) {

    int quiz = -1;
    int[] tempArray = {this.qz1, this.qz2, this.qz3, this.qz4, this.qz5};

    if(num != 0) {
        quiz = tempArray[num - 1];
    }
    else quiz = tempArray[num];

    return quiz;
}

这里的方法在它的参数中有测验 (qz) 变量的数量,它的值应该是 return(setter 当然会有两个参数:int num和积分)。该方法旨在从 1 开始工作,但如果我忘记了这一点,我不希望在我要求测验 0 时出错,所以这就是 if else 的目的。

但是,这种方法不适用于 setter,因为数组仅包含实例变量的 ,因此对数组的更改不会项目到实例变量。我知道这可以通过几个 if 语句来完成,如果有的话,我只是在寻找一个更优雅的解决方案。

这是构造函数和实例变量:

private String Name;
private int qz1, qz2, qz3, qz4, qz5;

Student(String Name, int qz1, int qz2, int qz3, int qz4, int qz5) {
    this.Name = Name;
    this.qz1 = qz1;
    this.qz2 = qz2;
    this.qz3 = qz3;
    this.qz4 = qz4;
    this.qz5 = qz5;
}

如果您认为 getter 方法可以做得更好,请也告诉我。

感谢您的回答!

我建议制作一个 int 数组来存储您的变量,而不是: 私人 int qz1,qz2,.... 做

private int [] quizValues;

然后您可以获得测验的价值:

public int getQuizValue(int storePositionOfQuiz) {
  // check for outOfBounds!
  return this.quizValues[storePositionOfQuiz];
}

如果需要,您可以使用整数数组作为参数来初始化测验值

public void setQuizValues(int [] newValues) {
  this.quizValues = newValues;
}

如果您有像 int qz1, qz2, qz3, qz4, qz5; 这样的变量,通常最好将它们制成列表或数组,就像您在 getter 中所做的那样。如您所说,问题在于数组中设置的值不会传递给原始整数变量。但为什么不直接使用 class 本身的数组, 而不是 那些不同的整数变量呢?这使您可以在 getter 和 setter 中使用数组(以及构造函数和其他一些地方,例如 hashCodetoStringequals).

private int[] quizArray = new int[5]; // set values in constructor

public int getQuiz(int num) {
    try {
        return quizArray[num];
    } catch (ArrayIndexOutOfBoundsException e) {
        return -1; // or raise exception
    }
}

public boolean getQuiz(int num, int value) {
    try {
        quizArray[num] = value;
        return true;
    } catch (ArrayIndexOutOfBoundsException e) {
        return false; // or raise exception
    }
}

我想指出几点:

  1. getQuiz() 您描述的方法不完全是 getter。它以这样的方式存在是很好的。只是不要称它为 getter.

  2. 而不是在 getQuiz() 方法中使用 tempArray,为什么不将它用作 class 变量(通过将其重命名为 quizzes? 这将减少声明这么多变量的工作,如 qz1az2、...

  3. 而且,现在,您还可以添加一个 setQuiz(int index, int value) 方法来达到 setter.

  4. 的目的