我有一个QAData类描述的对象。它包括以下属性: 用于保存提出问题的文本的字符串。 字符串数组恰好有4个可能的答案。 布尔数组正好包含与答案对应的4个正确/错误选项。 布尔数组,正好包含4个选项,指示用户是否选择了选项。
我的问题是如何在下面的初始课程中强制数组长度为4?
public class QAData {
private String questionText;
private String[] answerText = new String[4];
private Boolean[] correctAnswer = new Boolean[4];
private Boolean[] selectedAnswer = new Boolean[4];
QAData(String questionText, String[] answerText, Boolean[] correctAnswer, Boolean[] selectedAnswer){
this.questionText = questionText;
this.answerText = answerText;
this.correctAnswer = correctAnswer;
this.selectedAnswer = selectedAnswer;
}
public String getQuestionText(){
return this.questionText;
}
public String[] getAnswerText(){
return answerText;
}
public Boolean[] getCorrectAnswer(){
return correctAnswer;
}
public Boolean[] getSelectedAnswer(){
return selectedAnswer;
}
public void setSelectedAnswer(Boolean[] selectedAnswer){
this.selectedAnswer = selectedAnswer;
}
}
答案 0 :(得分:3)
事实上,这里的字段实例化是没用的:
private String[] answerText = new String[4];
private Boolean[] correctAnswer = new Boolean[4];
private Boolean[] selectedAnswer = new Boolean[4];
因为这些将在构造函数中被覆盖:
QAData(String questionText, String[] answerText, Boolean[] correctAnswer, Boolean[] selectedAnswer){
this.questionText = questionText;
this.answerText = answerText;
this.correctAnswer = correctAnswer;
this.selectedAnswer = selectedAnswer;
}
控制数组长度的唯一方法是在构造函数和设置数组的方法中检查它。 请注意,您在课程中提供的可变方法越少,更容易保证更多一致性规则。
这是一个保证构造函数中数组长度的示例:
QAData(String questionText, String[] answerText, Boolean[] correctAnswer, Boolean[] selectedAnswer){
assertLengthIs4(answerText, correctAnswer, selectedAnswer);
this.questionText = questionText;
this.answerText = answerText;
this.correctAnswer = correctAnswer;
this.selectedAnswer = selectedAnswer;
}
public void assertLengthIs4(Object[]... arrays){
for (Object[] array : arrays){
if (array == null || array.length != 4){
throw new IllegalArgumentException("size should be 4 for all arrays");
}
}
}
答案 1 :(得分:0)
Java Arrays API提供此功能:
Arrays.copyOf(T[] original, int newLength)
这会将数组截断/填充到新的长度。