【问题标题】:UPDATE: re Java ArrayList and method return更新:重新 Java ArrayList 和方法返回
【发布时间】:2017-04-29 13:14:10
【问题描述】:

下面是我的代码,打印方法在第一类(Hyrestagare)中作为“公共字符串地址()”。

我一直在 Stackoverflow 中阅读类似的问题和答案。但我只是变得更加困惑。我对代码进行了更改,重写了部分,但无法解决问题。 :(

【问题讨论】:

标签: java arraylist printing return


【解决方案1】:

首先,我不建议永远返回null,这只会让处理NullPointerExceptions 变得更加困难。

关于您的问题:

public String address(){
    for (Hus h : houses){
        return h.getAddress();
    }
    return null;
}

这里的问题是在您上面的示例中,您创建了一个名为 a1Hyrestagare 实例,但您从未向此类添加任何房屋。

这就是为什么当你稍后调用a1.address() 时,你的房子数组是空的,所以它只是returns null;

当您使用 ArrayListof Hus 时,您将拥有多个地址。您的方法的问题是,您只会获得第一个地址的元素,因为您返回(从函数中转义)该值。

根据您使用此功能的目标,我可以为您提供一些解决方案:

1) 这会将所有地址作为新列表返回。如果那里没有地址,那么您将得到一个空列表并且不必处理 null。

public List<String> getAddresses(List<Hus> list){
    return list.stream()
            .map(Hus::getAddress)
            .collect(Collectors.toList());
}

如果这个解决方案对你来说太复杂了,这会用更简单的代码给你同样的结果:

public List<String> getAddresses(List<Hus> list){
    List<String> addresses = new ArrayList<>();
    for(Hus h: list){
        addresses.add(h.getAddress());
    }
    return addresses;
}

但是,如果您只想要第一个地址,例如在您的代码中(如果有意或无意):

public static String getAddress(List<Hus> list){
    if(list.isEmpty()){
        return "no address";
    } else {
        return list.get(0).getAddress();
    }
}

【讨论】:

  • 你的方法解决了!然而,在练习纸上,教授指定将方法写为“public String address()”,如果没有可用的地址,他希望它返回 null……这让我更加困惑。
  • 你当然可以返回null,但是你必须在你的打印方法中进行检查,例如:String address = a1.address(); ,当你打印它时:System.out.print(address != null? address : ""); 这只是一个缩短的 if ?真:假
【解决方案2】:

Hyrestagare 类中,address() 方法在Hus 对象上调用getAddress(),但是,在Demo 类中没有setAddress() 调用,因此,地址仍然是null,请尝试以下操作:

    Hyrestagare a1 = new Hyrestagare();
    a1.setNamn("Donald");
    a1.setPersonnummer(111);

    Hyrestagare a2 = new Hyrestagare();
    a2.setNamn("Ivanka");
    a2.setPersonnummer(222);

    Hyrestagare b1 = new Hyrestagare();
    b1.setNamn("Barack");
    b1.setPersonnummer(333);

    Hyrestagare b2 = new Hyrestagare();
    b2.setNamn("Michelle");
    b2.setPersonnummer(444);

    Lagenhet l1 = new Lagenhet();
    l1.setHyra(5000);
    l1.setNummer(1);
    l1.setYta(200);

    Lagenhet l2 = new Lagenhet();
    l2.setHyra(2000);
    l2.setNummer(2);
    l2.setYta(50);

    Hus hus1 = new Hus();
    hus1.setAddress("Test Address");//sets the address

    // HYRESTAGARE KOPPLA TILL LAGENHET
    a1.setLagenhet(l1);
    a2.setLagenhet(l1);
    b1.setLagenhet(l2);
    b2.setLagenhet(l2);

    // LAGENHET KOPPLA HYRESTAGARE TILL LAGENHET, KOPPLA LISTA TILL LAGENHET
    ArrayList<Hyrestagare> renters = new ArrayList<Hyrestagare>();
    l1.laggTillHyrestagare(a1);
    l1.laggTillHyrestagare(a2);
    l2.laggTillHyrestagare(b1);
    l2.laggTillHyrestagare(b2);

    l1.setRenter(renters);
    l2.setRenter(renters);

    renters.add(a1);
    renters.add(a2);
    renters.add(b1);
    renters.add(b2);

    // HUS KOPPLA LAGENHET TILL LISTA
    ArrayList<Lagenhet> flats = new ArrayList<Lagenhet>();
    hus1.laggTillLagenhet(l1);
    hus1.laggTillLagenhet(l2);

    hus1.setApartments(flats);
    flats.add(l1);
    flats.add(l2);

    // KOPPLA HUS TILL HUS LISTA
    ArrayList<Hus> buildings = new ArrayList<Hus>();
    buildings.add(hus1);

    // PRINT METODER
    for (Hyrestagare temp : hus1.printHyrestagare(1)){
        System.out.println("Hyrestagare: " + temp.getNamn() + " (" + temp.getPersonnummer() + ").");
    }

    for (Hyrestagare temp : hus1.printHyrestagare(2)){
        System.out.println("Hyrestagare: " + temp.getNamn() + " (" + temp.getPersonnummer() + ").");
    }

    System.out.println("Address: " + a1.address());

【讨论】:

  • 我试过了,但它仍然打印出“地址:空”:/
猜你喜欢
  • 2015-11-15
  • 1970-01-01
  • 2015-01-29
  • 2021-03-05
  • 2016-06-21
  • 1970-01-01
  • 2011-02-12
  • 2015-08-02
  • 1970-01-01
相关资源
最近更新 更多