是否有可能在增强的for循环中找到当前索引?

时间:2011-10-07 11:22:08

标签: java for-loop

是否可以在增强的for循环中找到当前索引?如果是这样的话?

我知道我们可以使用额外的变量来检查它。但还有其他办法。

public boolean cancelTicket(Flight f, Customer c) {
    List<BookingDetails> l = c.getBooking();
    if (l.size() < 0) {
        return false;
    } else {
        for (BookingDetails bd : l) {
            if(bd.getFlight()==f){
                l.remove()  // Index here..
            }
        }
    }
}

3 个答案:

答案 0 :(得分:31)

  

是否可以在增强型for循环中找到当前索引?

没有。如果你需要索引,我建议你使用一个普通的for循环。

但是,在这种情况下,您实际上似乎并不需要索引。除非你正在处理一些非常奇怪的列表类型,否则你可以使用Iterator并使用Iterator.remove()方法,如下所示:

public boolean cancelTicket(Flight f, Customer c) {
    Iterator<BookingDetails> bdIter = c.getBooking().iterator();

    if (!bdIter.hasNext())
        return false;

    while (bdIter.hasNext())
        if (bdIter.next().getFlight() == f)
            bdIter.remove();

    return true;
}

答案 1 :(得分:11)

是,在for语句之前使用计数器。 就这样:

int i = 0;
for (int s : ss)
{
   // Some Code
   System.out.println(i);

   i++;
}

答案 2 :(得分:10)

  

是否可以在增强型for循环中找到当前索引?

要获取索引,您可以使用List.indexOf(object)

我已经使用这些技术获取列表中当前对象的索引。 例如,您在上面给出的,可以使用两种方式完成删除。

  • 使用对象实例删除对象。
 public boolean cancelTicket(Flight f, Customer c) {
        List<BookingDetails> l = c.getBooking();
        if (l.size() < 0) {
            return false;
        } else {
            for (BookingDetails bd : l) {
                if(bd.getFlight()==f){
                    l.remove(bd)  // Object Instance here..
                }
            }
        }
    }
  • 使用List.indexOf(index)
 public boolean cancelTicket(Flight f, Customer c) {
        List<BookingDetails> l = c.getBooking();
        if (l.size() < 0) {
            return false;
        } else {
            for (BookingDetails bd : l) {
                if(bd.getFlight()==f){
                    l.remove(l.indexOf(bd))  // index Number here..
                }
            }
        }
    }