You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java测验应用的构造方法中传入选项对象数组?

解决方案

1. 重构Question类,用选项数组替代单个选项变量

把原来的opt1-opt4四个独立成员变量替换为String[] options数组,同时修改构造方法接收数组参数,建议加入参数校验确保选项数量符合要求:

package com.param;

import java.util.Arrays;

public class Question {
    private int id;
    private String question;
    private String[] options; // 替换单个选项变量为数组
    private String answer;

    // 修改构造方法,接收选项数组参数
    public Question(int id, String question, String[] options, String answer) {
        super();
        // 校验选项数组合法性,避免传入空数组或长度不符的情况
        if (options == null || options.length != 4) {
            throw new IllegalArgumentException("必须传入包含4个选项的数组");
        }
        this.id = id;
        this.question = question;
        this.options = Arrays.copyOf(options, options.length); // 拷贝数组防止外部篡改内部状态
        this.answer = answer;
    }

    // 调整getter/setter方法
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getQuestion() {
        return question;
    }

    public void setQuestion(String question) {
        this.question = question;
    }

    // 返回选项数组的拷贝,避免外部修改内部数据
    public String[] getOptions() {
        return Arrays.copyOf(options, options.length);
    }

    // 设置选项数组时同样校验长度
    public void setOptions(String[] options) {
        if (options == null || options.length != 4) {
            throw new IllegalArgumentException("必须传入包含4个选项的数组");
        }
        this.options = Arrays.copyOf(options, options.length);
    }

    // 可选:保留原有单个选项的获取方法,兼容旧代码调用逻辑
    public String getOpt1() {
        return options[0];
    }

    public String getOpt2() {
        return options[1];
    }

    public String getOpt3() {
        return options[2];
    }

    public String getOpt4() {
        return options[3];
    }

    public String getAnswer() {
        return answer;
    }

    public void setAnswer(String answer) {
        this.answer = answer;
    }

    @Override
    public String toString() {
        return "Question [id=" + id + ", question=" + question + ", options=" + Arrays.toString(options) + ", answer=" + answer + "]";
    }
}

2. 修改QuestionService类,传入选项数组创建Question对象

在实例化Question时,直接传入String[]类型的选项数组替代原来的单个选项参数:

package com.param;

public class QuestionService {
    Question[] questions = new Question[4];

    public QuestionService() {
        // 用数组形式传入选项参数
        questions[0] = new Question(1, "Value of pie", new String[]{"3.12", "3.01", "3.14", "3.11"}, "3.14");
        questions[1] = new Question(2, "Your age", new String[]{"24", "54", "35", "25"}, "25");
        questions[2] = new Question(3, "This year", new String[]{"1898", "2034", "2024", "1999"}, "2024");
        questions[3] = new Question(4, "Days in jan", new String[]{"31", "30", "34", "11"}, "31");
    }

    public void playQuiz() {
        System.out.println("The quiz begins");
        for(Question q: questions) {
            System.out.println(q.getId() + "." + q.getQuestion()+"\n");
            // 遍历选项数组打印,无需逐个调用getOpt1-4
            String[] options = q.getOptions();
            for(String opt : options) {
                System.out.println(opt + "\n");
            }
        }
    }
}

关键说明

  • 数组拷贝:构造方法和setter中使用Arrays.copyOf,避免外部修改传入的数组影响Question内部状态。
  • 参数校验:加入数组长度校验,提前拦截非法参数,避免后续逻辑出错。
  • 兼容性:保留了原有的getOpt1()等方法,若原有代码依赖这些方法可直接复用;不需要兼容时可删除这些方法。

内容的提问来源于stack exchange,提问作者Paramesh Athreya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 08:27:35