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
相关产品推荐
相关产品推荐

