2012-01-11 3 views
0

У меня есть простой вопрос в java. У меня есть этот кусок кода:Объявление переменной за один раз

int i1=0; 
for(String x: list1) 
{ 
    for(String y: list2) 
    { 

     if(x == y) 
     { 
      log ("Checking "+x+" with "+y+" => found a match!"); 
      list1.remove(i1); 
      break; 
     } 
     else 
     { 
      log ("Checking "+x+" with "+y+" => not matching!"); 
     } 
    } 
    i1=i1+1; 
} 

Как вы можете видеть, я объявляю «i1» выше, но есть способ, чтобы объявить его в первый для только один раз и после финиша, что ДЛЯ чтобы установить себя?

Надеюсь, вы меня поймете.

+2

Похоже, вы пытаетесь воссоздать функциональность 'removeAll (Collection c)'. Вы также неправильно сравниваете значения «String». –

+0

любая конкретная причина, чтобы i1 увеличивался только один раз. – kosa

+0

просто объявите его в блоке for. – asaelr

ответ

1

Нет, вы не можете сделать это на Java. Если вы перемещаете декларацию внутри цикла for, переменная будет переназначена до ее начального значения на каждой итерации через цикл.

Если «unset» означает «выйти из сферы действия», вам, вероятно, не нужно беспокоиться об этом; там нет проблем с производительностью. Если вы действительно хотите заставить переменную выйти из области видимости в конце вашего внешнего цикла for, вы можете создать дополнительный блок вокруг всего, как это (но вам действительно не нужно это делать, это ненужно):

{ // Beginning of block <---------- 
    int i1=0; 
    for(String x: list1) 
    { 
     for(String y: list2) 
     { 

      if(x == y) 
      { 
       log ("Checking "+x+" with "+y+" => found a match!"); 
       list1.remove(i1); 
       break; 
      } 
      else 
      { 
       log ("Checking "+x+" with "+y+" => not matching!"); 
      } 
     } 
     i1=i1+1; 
    } 
} // End of block <---------- 
+0

спасибо за ваш ответ, я получаю повторяющуюся переменную, когда я копирую/вставляю это еще раз, и я иду, как i2 i3 i5 i654546 – Master345

1

может быть, вы можете написать код так:

for(String x = list1.get(0), int i1 = 0; i1 < list1.size(); 
            i1++, x = list1.get(i1)) 
{ 
    for(String y: list2) 
    { 

     if(x == y) 
     { 
      log ("Checking "+x+" with "+y+" => found a match!"); 
      list1.remove(i1); 
      break; 
     } 
     else 
     { 
      log ("Checking "+x+" with "+y+" => not matching!"); 
     } 
    } 
} 

Если я ошибаюсь, пожалуйста, предупредите меня.

+0

не забудьте обновить x. – asaelr

+0

'list1' - это' Collection', а не массив. –

0

Я не эксперт по Java, но я помню кое-что о том, чтобы не удалять объекты из списка, пока вы его итерации.

Так (даже если я ошибаюсь), вы должны сделать что-то вроде этого:

for(int i1=0;i<list1.size();i1++) 
{ 
    String x=list1.get(i1); 
    for(String y: list2) 
    { 

     if(x == y) 
     { 
      log ("Checking "+x+" with "+y+" => found a match!"); 
      list1.remove(i1--); 
      break; 
     } 
     else 
     { 
      log ("Checking "+x+" with "+y+" => not matching!"); 
     } 
    } 
} 

не забудьте -- в отдалении!

Смежные вопросы