是否可以在增强的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..
}
}
}
}
答案 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.. } } } }
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.. } } } }