如何强制我的数组成为特定长度 - Java

时间:2018-02-05 20:31:12

标签: java arrays declaration

我有一个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;
    }
}

2 个答案:

答案 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)

这会将数组截断/填充到新的长度。