2015-02-09 2 views
-1

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

add(java.lang.Integer) in ArrayList cannot be applied to java.lang.Integer[]

Если я не использую универсальный тип в ArrayList, он работает просто отлично. Я действительно не понимаю ошибку, так как arrayList и массив являются целыми. Что мне не хватает? Спасибо!

 ArrayList<Integer> recyclingCrates = new ArrayList<Integer>(); 
     int houses[] = new int[8]; 
     int sum = 0; 

     for (int x = 0; x < 8; x++) { 
      System.out.println("How many recycling crates were set out at house " + x + "?"); 
      houses[x] = scanner.nextInt(); 
      for (Integer n : recyclingCrates){ 
       houses[x]=n; 
      } 
     } 

     recyclingCrates.add(houses); //this is where I get the error 
+0

Итак, вы думаете, что 'int []' совпадает с 'Integer'? Или вы считаете, что 'ArrayList ' такой же, как 'int []'? Вы читали javadoc 'ArrayList # add'? –

+1

Примечание: ваш код имеет другие проблемы, не затронутые этим вопросом. Я не думаю, что он даст вам ожидаемые результаты, даже после устранения * этой проблемы. – immibis

ответ

1

add добавляет один элемент в список. Если ваш вызов преуспел, он добавит ссылку на массив в список, а не содержимое массива, - и тогда список будет содержать один элемент (который является ссылкой).

Предполагая, что вы хотите сохранить существующую структуру коды по какой-то причине (вместо того, чтобы добавлять элементы по отдельности внутри цикла):

Чтобы добавить содержимого массива в список, используйте Arrays.asList к " завернуть»массив в List, а затем использовать addAll:

recyclingCrates.addAll(Arrays.asList(houses)); 

Вам также необходимо изменить тип houses к Integer[] - в противном случае, Arrays.asList нужно будет возвращать List<int>, что невозможно. (Вы можете также использовать его в качестве Arrays.asList(thing1, thing2, thing3) возвращает список, содержащий thing1, things2 и thing3 - и этот синтаксис будет использоваться вместо этого, возвращающая список, содержащий только одну ссылку на массив, который был бы вернуться туда, где вы начали!)

+0

А это объясняет, почему мой код работал после того, как я сделал это: for (int x = 0; x <8; x ++) { System.out.println («Сколько ящиков для переработки было выставлено в доме» + x + "?"); дома [x] = сканер.nextInt(); recyclingCrates.add (дома [x]); } Зная это, только добавляет один элемент, делает то, что происходит намного лучше, спасибо! – Michelle

+0

@SotiriosDelimanolis oops, я предположил, что это Integer [], потому что это то, о чем говорится в цитированном сообщении об ошибке. – immibis

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