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

Java中检索Museum类的ArrayList<Painting>匹配指定参数的实现问题

代码问题盘点
  • 返回值类型错误:需求要求返回存储Painting对象的ArrayList,你的方法返回值定义为String,和需求完全不匹配,也和存储的元素类型不符。
  • 引用了未定义变量:代码里的filename在Museum类中没有任何定义,编译直接报错。
  • 未遍历画作集合:你完全没有操作存储所有馆藏画作的paintings属性,根本实现不了筛选逻辑。
  • 返回值覆盖不全:仅在if条件成立时有返回值,条件不成立时没有任何返回,不符合Java方法语法要求。
修正后代码

以下实现默认按作者名匹配,假设Painting类已实现getArtist() getter方法获取作者名,如果你要匹配画作名称等其他字段,修改对应调用的getter即可。

import java.util.ArrayList;

public class Museum  {
    // 字段定义
    private ArrayList<Painting> paintings;
    private String name;

    /**
     * 构造博物馆类
     */
    public Museum(String aMuseum) {
        paintings = new ArrayList<>();
        name = aMuseum;
    }

    public ArrayList<Painting> listMatches(String searchString)
    {
        // 局部变量存储匹配结果
        ArrayList<Painting> matchedPaintings = new ArrayList<>();
        // 遍历所有馆藏画作
        for (Painting painting : paintings) {
            // 匹配作者名称,需要忽略大小写可以改用equalsIgnoreCase
            if (painting.getArtist().equals(searchString)) {
                matchedPaintings.add(painting);
            }
        }
        // 返回匹配结果,无匹配时返回空集合
        return matchedPaintings;
    }

    // 补充添加画作到馆藏的方法,原代码缺少该方法无法往博物馆中新增画作
    public void addPainting(Painting painting) {
        paintings.add(painting);
    }
}
补充说明

如果你的匹配规则不是按作者,而是按画作名、创作年代等其他字段,只需要修改if判断里的Painting对象属性调用即可,不需要改动整体逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 07:45:04