Java如何实现单次调用函数即可传入多个对象完成处理?
实现代码修改方案
你需要调整方法入参支持多对象传入,同时调整匹配逻辑为遍历所有传入的景点做校验,具体修改如下:
核心修改点
- 修改
attractionInfo方法入参为Attraction类型数组,支持一次传入所有景点数据 - 复用同一个Scanner对象,避免重复创建输入流导致的读取异常,同时补充处理nextInt遗留的换行符问题,避免后续读取空值
- 匹配逻辑改为遍历所有传入的景点,忽略大小写匹配名称,匹配成功则输出对应开放时间,全部遍历后无匹配再输出无信息提示
- 调用
attractionInfo时仅调用一次,把所有景点打包成数组传入即可
修改后完整代码
import java.util.Scanner; class Attraction { String name; int open; } public class attractionGuide { public static void main(String[] args) { attractionDetails(); System.exit(0); } public static Attraction createAttraction(String attractionName, int openingTime) { Attraction a = new Attraction(); a.name = attractionName; a.open = openingTime; return a; } public static void attractionDetails() { Attraction TheEdenProject = createAttraction("The Eden Project", 9); Attraction LondonZoo = createAttraction("London Zoo", 10); Attraction TateModern = createAttraction("Tate Modern", 10); // 把所有景点放到数组中,一次传入 Attraction[] allAttractions = {TheEdenProject, LondonZoo, TateModern}; attractionInfo(allAttractions); } // 入参改为数组,接收所有景点 public static void attractionInfo(Attraction[] attractions) { Scanner scanner = new Scanner(System.in); System.out.print("Welcome. How many attractions do you need to know about? "); final int howMany = scanner.nextInt(); // 处理nextInt遗留的换行符,避免后续nextLine读取到空值 scanner.nextLine(); for (int i = 1; i <= howMany; i++) { System.out.print("\nName of attraction number " + i + "?: "); String attractionName = scanner.nextLine(); boolean isFound = false; // 遍历所有景点匹配 for (Attraction attr : attractions) { if (attractionName.equalsIgnoreCase(attr.name)) { System.out.println(attr.name + " opens at " + attr.open + "am."); isFound = true; break; } } if (!isFound) { System.out.println("I have no information about that attraction."); } } scanner.close(); } }
修改后代码仅会触发一次查询数量询问,输入要查询的景点数量后,依次输入景点名称就会匹配所有已录入的景点信息,和期望的输出效果完全一致。
内容的提问来源于stack exchange,提问作者user17604135
相关产品推荐
相关产品推荐

