2015-04-13 5 views
-1

Я получил это исключение, когда я выполняю этот код? Любая помощь, пожалуйста?Исключение в теме «main» java.lang.IndexOutOfBoundsException: Index: 2, Size: 1

public static void main(String[] args) throws SQLException { 

    professeur f = new professeur(); 
    ArrayList<Integer> arl =new ArrayList<Integer>(); 

    int k=0; 
    etudiant e = new etudiant(); 
    List<etudiant> list = e.getAll(); 
    List<professeur> l = f.getAll1(); 

    for (int i = 0; i < list.size(); i++) { 

     for (int j = 0; j < l.size(); j++) { 
      if (list.get(j).getIde()==l.get(i).getIdp()) { 
       k=list.get(i).getIde(); 

       System.out.println(list.get(i).getNome()); 
      } 
      break; 


     } 

      professeur p=new professeur(); 
      List <professeur> c= p.findAllbyID(k); 
      System.out.println(c.get(i).getNomp());} 



    } 

} 
+0

Помощь в совет: научиться использовать отладчик! – Andremoniy

+0

Комментарий к стилю кода: название ваших переменных ** очень ** запутывает. Вы создаете объект класса «professeur» (имена классов должны начинаться с верхнего регистра битвы). И тогда у этого класса «professur» есть метод 'getAll1()', который должен возвращать ... список профессоров? Это звучит крайне странно. Прежде всего, имя метода должно сказать что-то о том, что он будет делать, например, «getAssociatedProfesseurs» или что-то в этом роде. И, конечно же; с точки зрения ОО; он просто чувствует себя не так, что один профессор предлагает метод возвращения большего количества профессоров. – GhostCat

+0

Продолжался стиль кодирования: используйте синтаксис foreach для итерирования списков, например 'for (Etudiant etudiant: e.getAll())' (где я «исправил» имя класса для запуска верхнего регистра). Это намного проще ** писать, читать и поддерживать, чем C-стиль для циклов. – GhostCat

ответ

3

Похоже, вы изменили свои индексы.

С i итерацию по индексам list и j итерацию по индексам l, оно должно быть:

for (int i = 0; i < list.size(); i++) { 

    for (int j = 0; j < l.size(); j++) { 
     if (list.get(i).getIde()==l.get(j).getIdp()) { // i and j were switched 
                 // on this line 
      k=list.get(i).getIde(); 

      System.out.println(list.get(i).getNome()); 
     } 
     break; 


    } 
+0

Да, но и исключение: Исключение в потоке «main» java.lang.IndexOutOfBoundsException: Index: 2, Size: 2 – user3491229

+0

@ user3491229 Вероятно, вы, вероятно, получаете исключение в другом месте. Я предполагаю, что 'c.get (i) .getNomp()'. Вы не можете быть уверены, что в 'c' List есть столько элементов, сколько список' list', поэтому вызов 'c.get (i)' небезопасен. – Eran

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