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

Java中字符串数组:定长声明、构造传值及元素添加

没问题,我帮你实现这个完全符合需求的Film类,每一步都给你讲清楚逻辑:

1. 定义Film类与核心字段

首先我们先搭建类的基础结构,包含你需要的固定长度5的演员数组,以及示例的其他字段(比如影片名称,你可以根据需求添加更多字段)。默认构造器会初始化所有字段,并且显式把演员数组的每个元素设为null(其实Java中新建字符串数组时默认元素就是null,但按你的要求显式赋值更清晰):

public class Film {
    // 示例其他字段:影片名称
    private String title;
    // 固定长度为5的演员数组
    private String[] actors;

    // 默认构造器
    public Film() {
        // 初始化其他字段的默认值,这里设为空字符串
        this.title = "";
        // 创建长度为5的字符串数组
        this.actors = new String[5];
        // 显式将每个元素设为null,满足你的要求
        for (int i = 0; i < actors.length; i++) {
            actors[i] = null;
        }
    }
2. 实现带参构造器

带参构造器可以接收影片名和初始演员列表,我们会先初始化数组为全null,再把初始演员逐个添加进去(直接复用后面的添加方法,避免重复逻辑):

// 带参构造器:接收影片名和初始演员列表
    public Film(String title, String[] initialActors) {
        this.title = title;
        this.actors = new String[5];
        // 先将数组所有元素设为null
        for (int i = 0; i < actors.length; i++) {
            actors[i] = null;
        }
        // 如果传入了初始演员,逐个添加
        if (initialActors != null) {
            for (String actor : initialActors) {
                addActor(actor);
            }
        }
    }
3. 核心:实现添加演员的方法

这个方法会遍历数组寻找第一个空位(null元素),找到就添加演员;如果数组已满,就抛出IllegalStateException(这种异常适合表示对象当前状态不允许执行该操作)。另外我们加了参数校验,避免添加空的演员名称:

// 添加演员的方法
    public void addActor(String actor) {
        // 先校验传入的演员名称是否合法
        if (actor == null || actor.trim().isEmpty()) {
            throw new IllegalArgumentException("演员名称不能为空或空白");
        }
        // 遍历数组找第一个空位
        for (int i = 0; i < actors.length; i++) {
            if (actors[i] == null) {
                actors[i] = actor;
                return; // 添加成功后直接返回
            }
        }
        // 遍历完没找到空位,抛出异常
        throw new IllegalStateException("演员数组已满,无法添加新演员");
    }
4. 可选辅助方法(提升类的实用性)

为了让类更易用,我们可以添加getter/setter方法,以及重写toString方法方便查看影片信息。注意返回演员数组时返回副本,避免外部代码直接修改内部数组,保证封装性:

// 获取影片名称
    public String getTitle() {
        return title;
    }

    // 设置影片名称
    public void setTitle(String title) {
        this.title = title;
    }

    // 获取演员数组(返回副本,防止外部修改内部状态)
    public String[] getActors() {
        return actors.clone();
    }

    // 重写toString方法,方便打印影片信息
    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("Film{title='").append(title).append("', actors=[");
        for (int i = 0; i < actors.length; i++) {
            sb.append(actors[i]);
            if (i != actors.length - 1) {
                sb.append(", ");
            }
        }
        sb.append("]}");
        return sb.toString();
    }
}
测试示例

你可以用下面的代码测试这个类的功能,验证默认构造器、带参构造器和添加演员的逻辑:

public class Main {
    public static void main(String[] args) {
        // 使用默认构造器创建影片
        Film interstellar = new Film();
        interstellar.setTitle("星际穿越");
        interstellar.addActor("马修·麦康纳");
        interstellar.addActor("安妮·海瑟薇");
        System.out.println(interstellar);

        // 使用带参构造器创建影片
        String[] titanicActors = {"莱昂纳多·迪卡普里奥", "凯特·温斯莱特"};
        Film titanic = new Film("泰坦尼克号", titanicActors);
        titanic.addActor("比利·赞恩");
        titanic.addActor("凯西·贝茨");
        titanic.addActor("弗兰西丝·费舍");
        System.out.println(titanic);

        // 尝试添加第6个演员,会抛出异常
        try {
            titanic.addActor("新演员");
        } catch (IllegalStateException e) {
            System.out.println(e.getMessage());
        }
    }
}

运行这段代码会输出:

Film{title='星际穿越', actors=[马修·麦康纳, 安妮·海瑟薇, null, null, null]}
Film{title='泰坦尼克号', actors=[莱昂纳多·迪卡普里奥, 凯特·温斯莱特, 比利·赞恩, 凯西·贝茨, 弗兰西丝·费舍]}
演员数组已满,无法添加新演员

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:24:09