java方法接受对象数组,然后double返回一个对象数组

时间:2013-08-27 02:34:15

标签: java arrays object double

我正在尝试编写一个接受房屋数组和价格,价格限制的方法。我希望该方法为价格低于或等于priceLimit的房屋返回一系列房屋。我想对数据进行传递以确定返回数组的大小。问题是我无法弄清楚如何将Houses对象从houses数组添加到lowPriceHouses数组。我得到的错误是:

    Exception in thread "main" java.lang.NullPointerException at 
prob3.HouseTester.getLowPriced(HouseTester.java:76) at 
prob3.HouseTester.main(HouseTester.java:52)

代码

private static House[] getLowPriced(House[] houses, double priceLimit) 
{

    House[] lowPriceHouses = null;
    int index = 0;

    for (int i = 0; i <= houses.length; i++)
    {
        double prices = houses[i].getPrice();
        if (prices <= priceLimit)
            lowPriceHouses[index++] = houses[i];
    }

    return lowPriceHouses;  
}

4 个答案:

答案 0 :(得分:4)

错误是因为lowPriceHousesnull,您尚未对其进行初始化。您的循环也会出现问题,Java数组被0索引。

所以,而不是

for (int i = 0; i <= houses.length; i++)

你应该使用......

for (int i = 0; i < houses.length; i++)

你遇到的问题是知道你会遇到多少元素。

现在,您可以使用System.arraycopy或只使用某种List代替。

然后,您可以使用List#toArray将列表转换回数组。

有关详细信息,请参阅Collections

更新了示例

private static House[] getLowPriced(House[] houses, double priceLimit) 
{

    List<House> lowPriceHouses = new ArrayList<House>(houses.length);

    for (int i = 0; i <= houses.length; i++)
    {
        double prices = houses[i].getPrice();
        if (prices <= priceLimit)
            lowPriceHouses.add(houses[i]);
    }

    return lowPriceHouses.toArray(new House[lowPriceHouses.size()]);  
}

答案 1 :(得分:1)

您需要在写入数组之前创建数组。

House[] lowPriceHouses = null;

应该是

House[] lowPriceHouses = new House[houses.length]; 

你真的想要一个更小的阵列,因为你可能不需要所有房屋.. 将其设为ArrayList然后在返回之前将其转换为toArray会更容易。


for (int i = 0; i <= houses.length; i++)

您只想<

这是因为当你有一个大小为10的数组时,元素的索引是从0到9.因此访问元素arr[10]会导致问题。

答案 2 :(得分:0)

你的lowPriceHouses是Null,所以你得到NullPointerException。请替换为以下代码

private static House[] getLowPriced(House[] houses, double priceLimit)  {
    List<House> lowPriceHouses  = new ArrayList<House>()
    int index = 0;

    for (int i = 0; i <= houses.length; i++)
    {
         double prices = houses[i].getPrice();
         if (prices <= priceLimit)
           lowPriceHouses.add(houses[i]);
    }

    return lowPriceHouses.toArray(new House[lowPriceHouses.size()]); 
}

答案 3 :(得分:0)

或者,如果您使用的是Java 8,则可以执行此操作:

public static House[] getLowPriced(final House[] houses, final double limit){
    final List<House> list = Arrays.asList(houses).stream().filter(h -> h.getPrice() <= limit).sorted(Comparator.comparing(House::getPrice)).collect(Collectors.toList());
    return list.toArray(new House[list.size()]);
}