2012-10-15 22 views
15

Pobieram niektóre dane do tablicy String. Powiedzmy: ImageLinks. Jak mogę sprawdzić, czy element w tablicy istnieje?Sprawdzanie, czy element tablicy [] istnieje

Staram

if(ImageLinks[5] != null){} 

ale daje mi ArrayIndexOutOfBoundsException. (Ponieważ istnieje naprawdę nie 5 ogniwem w tablicy)

+0

'if (ImageLinks.length> 5)' ?? –

Odpowiedz

4

Upewnij tablica jest od tej długości przed wykonaniem odnośnika

if(ImageLinks.length > 5 && ImageLinks[5] != null){} 
+4

To nie działa z tablicą o długości 5 ... –

+0

nieprawidłowy typ, zaktualizowany do 5. – kosa

29

Aby zapobiec ArrayIndexOutOfBoundsException, można użyć następujących:

if(ImageLinks.length > 5 && ImageLinks[5] != null) 
{ 
    // do something 
} 

Ponieważ instrukcje w if są sprawdzane od lewej do prawej, nie dojdziesz do sprawdzania zerowego, jeśli tablica nie ma prawidłowego rozmiaru.

Można łatwo generalizować w dowolnym scenariuszu.

+4

Nie powiedzie się z tablicą o długości 5 ...;) –

+0

Już to edytowałem;) – Baz

+0

Nie mam pojęcia, I '+ 1' po korekta. –

0

tak że są mniejsze niż 6 elementów ImageLinks [5] odnosi się do 6 elementu jako wskaźnik tablicy w Java zaczyna się od 0

2

-i funkcji statycznych

public static boolean isElementExists(String[] data, int index){ 
    try{ 
     data[index]; 
     return true; 
    } catch(ArrayIndexOutOfBoundsException e){ 
     return false; 
    } 
} 

teraz otrzymał innego połączenia Twój kod

if(isElementExists(ImageLinks, 5)){ 
    //Your Code 
} 
+0

To nie zajmie się sprawą 'null'. – Baz

+0

@Baz Jest to adresowanie wyjątku ArrayIndexOutOfBoundsException, jeśli chcemy obsłużyć Null Condition możemy w dowolnym momencie dodać jeszcze jeden blok catch dla NullPointerException – Vivek

+0

Po prostu mówiąc, że OP chce osiągnąć oba. – Baz

0

powodem jest tablica ma mniej elementów niż 6.

rzeczą, należy najpierw sprawdzić, czy jest to ... że ma wiele elementów .. jeśli tak, to tylko wykonać dany kod

int index =5; 
    if(ImageLinks.length>index) 
    { 
      if(ImageLinks[index]!=null) 
      { //your code 
      } 
    } 

ktoś zaproponował następujący kod

if(ImageLinks.length > 5 && ImageLinks[5] != null) 
{ 
// do something 
} 

powodem, dla którego nie powinieneś go używać jest ... ImageLink [5] jest nadal wywoływany, nawet jeśli rozmiar tablicy jest mniejszy. ale w tym, który dałem ... jest wywoływany tylko wtedy, gdy pierwsze wyrażenie if jest prawdziwe:

+0

Twoja odpowiedź jest nieprawidłowa. Zobacz logikę "zwarcia" na następującej stronie dokumentacji Java: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op2.html – thaspius

+0

jeśli pierwsza instrukcja boolowska ma wartość false i po niej jest operator &&, nie ma powodu do kontynuowania oceny, ponieważ całe wyrażenie musi być w tym punkcie fałszywe niezależnie od tego, czy drugi operand jest prawdziwy czy fałszywy – thaspius

Powiązane problemy