В данной задаче я долго мучился, не понимая почему валидацию не проходило, но стоило мне поменять порядок объявления списков, как все заработало? Работает:
ArrayList<Integer> a3 = new ArrayList<Integer>();
       ArrayList<Integer> a2 = new ArrayList<Integer>();
       ArrayList<Integer> a1 = new ArrayList<Integer>();

       for (int i = 0; i < 20; i++) {
           if (a.get(i)% 6 == 0) {
                   a2.add(a.get(i));
                   a3.add(a.get(i));
           }
           else if (a.get(i)% 3 == 0)
               a3.add(a.get(i));
                   else if (a.get(i)% 2 == 0)
                           a2.add(a.get(i));
                       else a1.add(a.get(i));
       }
Не работает:
ArrayList<Integer> a1 = new ArrayList<Integer>();
ArrayList<Integer> a2 = new ArrayList<Integer>();
ArrayList<Integer> a3 = new ArrayList<Integer>();
for (int i = 0; i < 20; i++) {
    if (a.get(i)% 6 == 0) {
            a2.add(a.get(i));
            a3.add(a.get(i));
    }
    else if (a.get(i)% 3 == 0)
        a3.add(a.get(i));
            else if (a.get(i)% 2 == 0)
                    a2.add(a.get(i));
                else a1.add(a.get(i));
}