2014-01-14 3 views
0

Так что я просто изучаю массивы на Java (интересные вещи), но у меня возникают проблемы с тем, чтобы обмануть метод contains().Массивы и поиск в Java

Я пробовал:

Random rn = new Random(); 

     int first = 12; 
     int[] tab = new int[first]; 

     for (int i = 0; i <= first - 1; i++) { 
      tab[i] = rn.nextInt(10); 

который, казалось, прекрасно работать для заполнения в моем массиве, но потом я попробовал:

System.out.println(Arrays.asList(tab).contains(9)); 

И независимо от того, что, даже если я заполнить массив вручную с 9, он все равно будет печатать только «ложь».

Что я делаю неправильно?

+0

@ZouZou ли вы его на ярлык? –

+2

Это возвращает 'ArrayList ' с одним элементом, – SLaks

+2

@SotiriosDelimanolis Я просто читал [это] (http://stackoverflow.com/questions/21120554/arrays-aslist-contains-on-double-vs-double-arrays # 21120615) вопрос задал 20 минут назад :) –

ответ

0

Попробуйте

Integer[] tab = new Integer[]{9}; 
System.out.println(java.util.Arrays.asList(tab).contains(9)); 

Я получаю

true 
+0

Я думаю моя ошибка заключалась в использовании «int» вместо «Integer». Все отлично сработало с «Integer». Любая идея, почему это так? Ваш ответ был идеальным, хотя! Большое спасибо! – ViRALiC

+0

@ViRALiC В сочетании с авто-боксом; да. Вы получали «Список », потому что generics не допускают примитивные типы. –

+1

Проблема заключается в 'Arrays.asList()' - типом его параметра является 'Object ...', что означает, что вы можете передать либо аргумент 'Object []', либо любое количество индивидуальных аргументов Object. Теперь 'tab' является' int [] ', который НЕ является типом' Object [] '. Это, однако, тип 'Object', поэтому он интерпретируется как один аргумент. Вы получаете список из одного элемента, который является 'tab', а не список из 12 элементов. Если вы объявите 'tab' как' Integer [] 'вместо' int [] ', ваша программа будет работать так, как вы намереваетесь, потому что' Integer [] 'IS является подтипом' Object [] '. –

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