Java 是否可以在增强的for循环中找到当前索引?
是否可以在增强的for循环中找到当前索引?如果是,怎么做 我知道我们可以用一个额外的变量来检查它。但是还有别的办法吗Java 是否可以在增强的for循环中找到当前索引?,java,for-loop,Java,For Loop,是否可以在增强的for循环中找到当前索引?如果是,怎么做 我知道我们可以用一个额外的变量来检查它。但是还有别的办法吗 public boolean cancelTicket(Flight f, Customer c) { List<BookingDetails> l = c.getBooking(); if (l.size() < 0) { return false; } else { for (BookingDetail
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..
}
}
}
}
公共机票(f航班,客户c){
列表l=c.getBooking();
如果(l.size()<0){
返回false;
}否则{
对于(预订详细信息bd:l){
如果(bd.getFlight()==f){
l、 remove()//在此处建立索引。。
}
}
}
}
是否可以在增强的for循环中找到当前索引?
不需要。如果你需要索引,我建议你使用普通的for循环
然而,在这种情况下,您实际上似乎并不需要索引。除非您处理的是某种非常奇怪的列表类型,否则可以使用迭代器
并使用迭代器.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;
}
公共机票(f航班,客户c){
迭代器bdIter=c.getBooking().Iterator();
如果(!bdIter.hasNext())
返回false;
while(bdIter.hasNext())
if(bdIter.next().getFlight()==f)
b iter.remove();
返回true;
}
是否可以在增强的for循环中找到当前索引?
要获取索引,可以使用List.indexOf(object)
我使用了这些技术来获取列表中当前对象的索引。
例如,您在上面给出的示例中,可以使用两种方法进行删除
- 使用对象实例删除对象
公共机票(f航班,客户c){
列表l=c.getBooking();
如果(l.size()<0){
返回false;
}否则{
对于(预订详细信息bd:l){
如果(bd.getFlight()==f){
l、 remove(bd)//此处的对象实例。。
}
}
}
}
- 使用List.indexOf(索引)
公共机票(f航班,客户c){
列表l=c.getBooking();
如果(l.size()<0){
返回false;
}否则{
对于(预订详细信息bd:l){
如果(bd.getFlight()==f){
l、 删除(l.indexOf(bd))//此处的索引号。。
}
}
}
}
是的,在for语句之前使用计数器。 因此:
这没有任何意义:
if(list.size()<0)
。也许你的意思是==
?检查这个。即使您确实有索引,尝试在增强的for循环中从列表中删除元素也会导致ConcurrentModificationException。使用@aioobe建议的迭代器“尽管在这种特殊情况下,删除操作不需要索引”-此外,您不能将索引用于删除操作,因为如果这样做,您将得到ConcurrentModificationException
。正如aioobe所说,正确的方法是使用Iterator.remove()
.List.indexOf是O(n),所以我尽量避免在一般情况下使用它。此外,indexOf总是返回列表中对象的第一次出现,这可能不是您想要的。读者小心!这绝对不是办法!这不仅非常慢(O(n^2)),而且可能不正确(例如,对于列表中的重复值)。最佳和最有效的答案;-)
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..
}
}
}
}
int i = 0;
for (int s : ss)
{
// Some Code
System.out.println(i);
i++;
}