Java不使用数组/集合时如何跨类访问现有指定对象
实现方案
因为要求不能使用数组和集合,我们可以通过自引用链表结构存储所有房源,不需要借助任何集合/数组工具,完全符合开发要求。
第一步:修改Listing类
修改点如下:
- 新增
next属性,用于指向下一个房源对象,构成链表结构 - 补充
next属性的get/set方法 - 修正
isLocatedAt方法的字符串比较逻辑:==是比较字符串的内存地址,要判断内容相等必须用equals()方法
public class Listing { //原有属性保持不变 private String listingName; private int listingNumb = 0; private double price; private boolean isForSale; private HouseData housedata; private boolean isSold; //新增:指向下一个房源的引用 private Listing next; //原有构造方法保持不变 public Listing(String newListing, double newPrice, HouseData housedata) { listingName = newListing; listingNumb++; price = newPrice; isForSale = false; this.housedata = housedata; isSold = false; //next默认初始化为null } //新增:next属性的get/set方法 public Listing getNext() { return next; } public void setNext(Listing next) { this.next = next; } //原有方法仅修改isLocatedAt的逻辑 public boolean isLocatedAt(String city){ return housedata.city().equals(city); } //其余原有方法全部保留不变即可 }
第二步:修改RealEstateAgency类
修改点如下:
- 新增链表头节点属性
firstListing,存储第一个房源的引用 - 新增
addListing方法,用于往中介的房源链表中新增房源 - 实现
displayListingsLocatedAt方法,遍历链表筛选符合城市要求的房源
public class RealEstateAgency { //原有有效属性保留,删除无用的单个listing属性 private String agency; private double profit; private String agent; private boolean isOnSale; //新增:房源链表头节点 private Listing firstListing; public RealEstateAgency() { profit = 0; firstListing = null;//初始状态没有房源 } //新增:添加房源到链表 public void addListing(Listing newListing) { if(firstListing == null) { firstListing = newListing; } else { //新插入的房源作为新的头节点 newListing.setNext(firstListing); firstListing = newListing; } } //原有getProfit方法保持不变 public double getProfit(){ return profit; } //实现指定城市房源查询方法 public void displayListingsLocatedAt(String city){ System.out.println("The available listings for this city are: "); //遍历整个房源链表 Listing current = firstListing; while(current != null) { //筛选条件:城市匹配+房源在售 if(current.isLocatedAt(city) && current.getIsForSale()) { System.out.println("- 房源名称:" + current.getListingName() + ",价格:" + current.getPrice()); } current = current.getNext(); } } }
第三步:修改AppStart主类
创建完房源后,全部添加到中介对象中,测试时直接调用查询方法即可:
public class AppStart { public static void main(String[] args) { Address address1 = new Address("street", "postalcode", "city"); HouseData house1 = new HouseData(2, true, address1); Listing list1 = new Listing("Imóvel1", 9000, house1); list1.setIsForSale(true);//设置为在售才能被查询到 Listing list2 = new Listing("Imóvel2", 9000, house1); list2.setIsForSale(true); Listing list3 = new Listing("Imóvel3", 8000, house1); list3.setIsForSale(true); RealEstateAgency real1 = new RealEstateAgency(); //把所有房源添加到中介库中 real1.addListing(list1); real1.addListing(list2); real1.addListing(list3); //测试查询功能 real1.displayListingsLocatedAt("city"); } }
可选优化点
你当前的listingNumb是实例属性,每个房源的编号都是1,如果需要全局唯一的房源编号,可以把它改成private static int listingNumb = 0;,每次构造时自增即可。
内容的提问来源于stack exchange,提问作者Nayana
相关产品推荐
相关产品推荐

