Java ArrayLists - PullRequest
       3

Java ArrayLists

0 голосов
/ 27 июля 2011

Я пытаюсь запустить программу, созданную на Java, но я не знаю, что происходит, потому что она выдает следующую ошибку:

Exception in thread "main" java.lang.ClassCastException: 
java.lang.String cannot be cast to java.util.ArrayList

Вот код:

 public static ArrayList connections(ArrayList list3) {

        ArrayList connections = new ArrayList();
        int row1 = 1;
        int row2 = 0;
        int col = 0;

        connections.add(new ArrayList());
        ((ArrayList)connections.get(0)).add(0);
        ((ArrayList)connections.get(0)).add(1);

        System.out.print(((ArrayList)connections.get(0)).get(0));

        while(row1 < list3.size()) {


            if(((ArrayList)list3.get(row1)).get(col).equals(((ArrayList)connections.get(row2)).get(col))){
                connections.add(((ArrayList)list3.get(row1)).get(1));
                row1++;
            }

            else {
                connections.add(new ArrayList());
                connections.add(((ArrayList)list3.get(row1)).get(0));
                row2 = row1;
                row1++; 
            }
        }

        return connections;
     }

Кажется, что ошибка в операторе if.Может ли кто-нибудь помочь мне с этим?

Ответы [ 2 ]

3 голосов
/ 27 июля 2011
if(((ArrayList)list3.get(row1)).get(col).equals(((ArrayList)connections.get(row2)).get(col))){

должно читаться

if(((ArrayList)list3.get(row1)).get(col).equals(( ((ArrayList)connections).get(row2)).get(col))){

Вместо того, чтобы приводить соединения, вы сначала преобразует connection.get (row2), а затем получаете массив.определенно следует рефакторинг кода для использования функциональности Java 1.5, также называемой обобщенными.Если это не вариант, вы должны изменить код для большей читабельности - например: ваш метод называется «соединения», а затем ваша переменная называется «соединения»

2 голосов
/ 27 июля 2011

Вы также должны использовать дженерики вместо кастинга. Таким образом, вы получите ошибку во время компиляции, если вы сделаете это, и ваш код будет безопасным для типов. Обобщения указывают только тип, который вы используете для компилятора, чтобы он мог проверять типы во время компиляции.

Пример:

ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
list.add(new ArrayList<Integer>());

list.get(0).add(0);
list.get(0).add(1);
list.get(0).add(2);

Подробнее о дженериках здесь.

Надеюсь, это поможет.

...