2013-07-07 13 views
6

Prosty kod Java dla sprawdzenia, czy element istnieje w tablicy lub nie:Sprawdzanie czy element istnieje w tablicy

import java.util.Arrays; 

public class Main { 
    static int[] numbers = {813, 907, 908, 909, 910}; 

    public static void main(String[] args) { 
     int number = 907; 
     //Integer number = 907; // the same thing -- it's not found. 
     boolean b = Arrays.asList(numbers).contains(number); 
     System.out.println(b); // => false 
    } 
} 

1) Dlaczego nie znaleźć 907 w tablicy?

2) Jeśli jest lepszy sposób na zrobienie tego, podziel się swoją wiedzą.

UPDATE:

Mówiono, że asList konwertuje int[] do List<int[]> z jednego członka: na pierwotnej liście. Jednak Spodziewam poniższy kod, żeby dać mi 1, ale daje mi 5:

System.out.println(Arrays.asList(numbers).size()); 
+0

Czy próbowałeś używać liczb całkowitych = 907; ? –

+0

Czarownica to twoje pytanie? – surfealokesea

+0

nie "int" oznacza Integer? –

Odpowiedz

12

Problemem jest to, że Arrays.asList(numbers) nie robi tego, co myślisz. Konwertuje swój int[] na List<int[]> z jednym elementem: oryginalną listą.

Możesz wykonać proste wyszukiwanie liniowe lub, jeśli twoja macierz numbers jest zawsze sortowana, użyj Arrays.binarySearch(numbers, 907); i sprawdź, czy wynik jest negatywny (czyli nie znaleziono).

+1

** Konwertuje twój int [] na listę z pojedynczym członkiem: oryginalną listą. ** --sor, nie dostałem tego. –

+0

'.asList (num)' oznacza "jako listę". Nie powinieneś oczekiwać, że metoda zwana '.asList (num)' zwróci tablicę zamiast ... –

+0

zobacz moją aktualizację –

6

Listy nie zawierają prymitywów, więc Arrays.asList (int []) będzie produkować List z jednym wejściem typu int[].

Ten kod działa:

static Integer[] numbers = {813, 907, 908, 909, 910}; 

public static void main(String[] args) { 
    Integer number = 907; 
    boolean b = Arrays.asList(numbers).contains(number); 
    System.out.println(b); // => false 
} 

Dla Państwa pytanie, co będzie Arrays.asList(numbers) zawierać tak długo, jak jest to int[]:

ten kod:

static int[] numbers = {813, 907, 908, 909, 910}; 

public static void main(String[] args) { 
    int number = 907; 
    List<int[]> list = Arrays.asList(numbers); 

    boolean b = list.contains(number); 
    System.out.println(b); // => false 
    System.out.println("list: " + list); 
    for(int[] next : list) { 
     System.out.println("content: " + Arrays.toString(next)); 
    } 
} 

ma ten wynik:

false 
list: [[[email protected]] 
content: [813, 907, 908, 909, 910] 

Jak widać, list zawiera jeden element typu int[] ([[I wskazują int[]). Ma elementy, które zostały pierwotnie utworzone.

+0

** z jednym wpisem typu int [] ** - jaka będzie wartość tego wpisu? –

+0

@MariusKavansky Oryginalna tablica. Zaktualizuję moją odpowiedź, aby wyjaśnić. –

+0

@MariusKavansky Spójrz na moją aktualizację –

1

Ponieważ Twoja tablica jest posortowana, możesz użyć Arrays.binarySearch().

Dzięki temu nie trzeba najpierw konwertować na numer List. Sprawdź kod powrotu tej metody: jeśli jest dodatnia, element jest w tablicy; jeśli jest ujemna, to nie jest:

int number = 907; 
System.out.println(Arrays.binarySearch(numbers, number) >= 0); 
+0

spójrz na moją aktualizację –

+0

Uhm, OK, muszę przetestować; Jeśli jednak jest to posortowana tablica, moja metoda zadziała. Usuwanie nieistotnej części. – fge

2

Z guawy ImmutableSet:

public class Main { 

    private static final Set<Integer> NUMBERS = ImmutableSet.of(813, 907, 908, 909, 910); 

    public static void main(final String[] args) { 
     final int number = 907; 
     final boolean b = NUMBERS.contains(number); 
     System.out.println(b); // true 
    } 
} 

ImmutableSet gwarantuje nikt dodaje coś do NUMBERS

0

Używaj tego kodu zamiast tego.To tylko jeden z tych czasów masz do czynienia z silnie typowanych dziwactw Javy :)

import java.util.Arrays; 

    public class Main { 
     static Integer[] numbers = {813, 907, 908, 909, 910}; 

     public static void main(String[] args) { 
     Integer number = new Integer(907); 

     boolean b = Arrays.asList(numbers).contains(number); 
     System.out.println(b); 
    } 
} 
+0

Zauważyłeś, że twoja odpowiedź jest dokładnie taka sama jak moja? –

+0

Niezupełnie, obiekt kontra symbol ... Jest też nieco krótszy – PMARINA

0

mógłby po prostu użyć pętli for przechodzi tablicy i pasuje do każdego elementu z jednego, że szukasz . Potem możesz odejść.

Przyczyna, dla której nie działa, jest z tego samego powodu, co inne osoby.

Powiązane problemy