所以,我试图为一个构造函数的多个实例变量创建一个setter方法。我已经用这种方式制作了一个吸气剂:
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)变量的数量,该变量的值应该返回(当然,setter会有两个参数:int num和int score)。该方法适用于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方法中可以做得更好,请告诉我。
感谢您的回答!
答案 0 :(得分:0)
我建议创建一个int数组来存储变量,而不是: private int qz1,qz2,.... 做
private int [] quizValues;
然后,您可以获得测验的值:
public int getQuizValue(int storePositionOfQuiz) {
// check for outOfBounds!
return this.quizValues[storePositionOfQuiz];
}
如果需要,可以使用int-array作为参数
初始化测验值public void setQuizValues(int [] newValues) {
this.quizValues = newValues;
}
答案 1 :(得分:0)
如果你有像int qz1, qz2, qz3, qz4, qz5;
这样的变量,那么通常最好将它们作为列表或数组,就像你在getter中所做的那样。正如您所说,问题是数组中设置的值不会传输到原始整数变量。但是为什么不在类本身中使用数组,而不是那些不同的整数变量?这使得你可以在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
}
}
答案 2 :(得分:0)
有些事情,我想指出:
getQuiz()
方法并不完全是一个吸气剂。以这种方式存在它是好的。只是不要把它称为吸气剂。
不是在tempArray
方法中使用getQuiz()
,为什么不将它用作类变量(通过将其重命名为quizzes
?这会减少工作量声明诸如qz1
,az2
,...
而且,现在,您还可以添加setQuiz(int index, int value)
方法,以实现setter的目的。