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

