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

Java不使用数组/集合时如何跨类访问现有指定对象

实现方案

因为要求不能使用数组和集合,我们可以通过自引用链表结构存储所有房源,不需要借助任何集合/数组工具,完全符合开发要求。

第一步:修改Listing类

修改点如下:

  1. 新增next属性,用于指向下一个房源对象,构成链表结构
  2. 补充next属性的get/set方法
  3. 修正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类

修改点如下:

  1. 新增链表头节点属性firstListing,存储第一个房源的引用
  2. 新增addListing方法,用于往中介的房源链表中新增房源
  3. 实现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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 16:15:08