如何对多个实例变量使用 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 中使用数组(以及构造函数和其他一些地方,例如 hashCode
、toString
和 equals
).
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
}
}
我想指出几点:
getQuiz()
您描述的方法不完全是 getter。它以这样的方式存在是很好的。只是不要称它为 getter.
而不是在 getQuiz()
方法中使用 tempArray
,为什么不将它用作 class 变量(通过将其重命名为 quizzes
? 这将减少声明这么多变量的工作,如 qz1
、az2
、...
而且,现在,您还可以添加一个 setQuiz(int index, int value)
方法来达到 setter.
的目的
所以,我正在尝试为一个构造函数的多个实例变量创建一个 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 中使用数组(以及构造函数和其他一些地方,例如 hashCode
、toString
和 equals
).
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
}
}
我想指出几点:
getQuiz()
您描述的方法不完全是 getter。它以这样的方式存在是很好的。只是不要称它为 getter.而不是在
getQuiz()
方法中使用tempArray
,为什么不将它用作 class 变量(通过将其重命名为quizzes
? 这将减少声明这么多变量的工作,如qz1
、az2
、...而且,现在,您还可以添加一个
setQuiz(int index, int value)
方法来达到 setter. 的目的