1

我可以得到一些我可以挑选并研究它们如何工作的工作代码示例吗?具体来说,我需要弄清楚如何从列表中的 x 编号对象中获取地址字段?如何从列表中删除第 x 个对象?如何将对象 x 的价格字段设置为新值?

我了解houseList.add如何将数据放入附加到列表末尾的新对象中,但我不了解它的反面以及如何定位特定对象并对其进行操作。请展示一个有效的多类示例。谢谢!

创建 House 对象的类,它包含以下信息;

public House(int address, String street, double price, int rooms) {
    this.address = address;
    this.street = street;
    this.price = price;
    this.rooms = rooms;
}

它有以下方法......

public void SetAddress (int address){
    setAddress(address);
}

private void setAddress (int address){
    this.address = address;
}

public int GetAddress (int address){
    address = getAddress(address);
    return address;
}

private int getAddress (int address){
    return address;
}

@Override
public String toString() {
    return address + " " + street + " " + price + " " + rooms;
}

ETC...

在另一个类中,我声明了一个名为 houseList 的 House 对象列表,它是一个 ArrayList。

List<House> houseList;
houseList = new ArrayList();

并可以用数据填充它,

houseList.add(new House(this.address, this.street, this.price, this.rooms));  

并遍历它...

  public void showHouses() {
    Iterator<House> itr = houseList.iterator();
    while (itr.hasNext()) {
        System.out.println(itr.next().toString());
    }
}

到目前为止,我上面列出的 House 方法都没有发挥作用,除了已被覆盖的 toString 方法。我无法弄清楚的是如何为列表的第 x 个元素提取 this.street 或 this.price 。我可以使用 houseList.add(new House(this.address, this.street, this.price, this.rooms)); 将数据放入列表中
我可以看到我的数据在迭代时按预期存储。我有这些 setter 和 getter,但我不明白如何使用它们将这些项目拉出或放入。由于我使用了 houseList.add,我认为 add 的反面是 get,但没有找出正确的语法。

4

2 回答 2

4

itr.next()从列表中返回下一个可用的 House 对象。您需要调用该房屋对象的方法。

例子:

 while (itr.hasNext()) {

        House hs = itr.next();
        System.out.println(hs.getAddress(input));
        System.out.println(hs.toString());
    }
于 2012-11-19T15:42:17.020 回答
3

固定吸气剂

首先,处理 getter/setter。以下吸气剂:

private int getAddress (int address){
    return address;
}

应固定为如下所示:

private int getAddress() {
    return address;
}

在您的代码中,您的getAddress(int address)方法有一个 int 参数,并直接返回该参数。它甚至不查看存储地址值的字段。

遍历列表

你可以重写这个:

public void showHouses() {
    Iterator<House> itr = houseList.iterator();
    while (itr.hasNext()) {
        System.out.println(itr.next().toString());
    }
}

以更紧凑的方式,使用 Java-5 样式for循环,如下所示:

public void showHouses() {
    for (House house : houseList) {
        System.out.println(house);
        // or, say: System.out.println(house.getAddress());
    }
}

或者像这样,如果你真的想使用迭代器:

public void showHouses() {
    Iterator<House> itr = houseList.iterator();
    while (itr.hasNext()) {
        House house = itr.next();
        System.out.println(house);
        // or, say: System.out.println(house.getAddress());
    }
}

请注意,在上面的示例中,您通常需要小心next()每次迭代只调用一次。那就是:分配itr.next()给一个局部变量,并使用它,而不是itr.next()每次迭代多次调用。

第一种方式的优点是比较短;很明显,您所做的只是遍历集合,而不是以任何方式修改它(尽管您仍然可以修改它的值)。

第二种方式的优点是您可以itr.remove()在遍历(迭代)集合时调用以从集合中删除元素。

第x家

如果你需要第 x 家,你可以写:

int x = ...;
House h = houseList.get(x);
System.out.println(h);
// or: System.out.println(h.getAddress());

.

编辑:

这是您有时会在遍历列表的代码中看到的另一种模式:

for (Iterator<House> it = houseList.iterator(); it.hasNext();) {
    House house = it.next();
    // Blah, blah..
}

这与上面基于迭代器的遍历具有相同的优点。但是,此版本将迭代器变量 ( ) 的范围限制为it循环体。在上面的版本中,迭代器变量的作用域是整个方法体。因此,更容易看出您从不在循环之外使用迭代器。

当您想在一个方法(或其他块)中执行多个基于迭代器的遍历时,将范围限制在循环体中也很有用。它还允许您为第二个循环重复使用相同的变量名(即使第二个循环迭代不同类型的集合)。

于 2012-11-19T15:50:04.703 回答