2013-04-26 9 views
5

Próbowałem szukają, ale ja naprawdę nie teraz, jak sformułować pytanie poprawnie ...Potrzebuję pomocy podejmowania if z wieloma operatorami logicznymi łatwiejszych

Mam if-statement z wielu logiczne operatorów. Jak to zrobić łatwiej?

If (n == 1 ||n == 2 ||n == 3 ||n == 5 ||n == 9 ||n == 8 ||n == 7 ||n == 551 ||n == 17 ||n == 81 || etc etc) 
{ //Stuff 
} 

myślę w pseudo-kodzie chcę coś takiego:

List list = {1, 3, 5, 7, 9, 12, 14, 16, 18, 19, 21, 23, 25, 27, 30, 32, 34, or 36 } 

if n is in list, then {} 

Jak można zrozumieć, jestem początkujący i mam problemy formułując to, czego potrzebuję.

+1

Tak twoje podejście Lista będzie działać, to jest do zrobienia .. – Thihara

+0

@smerny Nie potrzeba przełącznika czy jest to pojedynczy if ... – Thihara

Odpowiedz

13

Jak o:

int[] validOptions = { 1, 2, 3, 5, 7, 8, 9, 17, 81, 551 }; 

if (Arrays.binarySearch(validOptions, n) >= 0) 
{ 
    // Yup, found it 
} 

pamiętać, że kolejność oryginalnego wyboru (który miał 551 przed 17 na przykład) tak, że tablica jest posortowana. Wyszukiwanie binarne będzie pracowało z posortowanymi danymi.

Proponuję tu tylko tablicę, ponieważ jest nieco łatwiejsza do określenia, szczególnie gdy mamy do czynienia z typem pierwotnym. Jeśli chcesz, aby były dynamiczne, bardziej odpowiednie byłoby ustawienie List<Integer> lub .

pamiętać, że to prawie na pewno nie ma znaczenia, gdy zestaw jest niewielka, warto wziąć pod uwagę charakterystykę działania różnych wyszukiwań:

  • HashSet.contains - O (1)
  • Arrays.binarySearch - O (log N)
  • ArrayList.contains - o (N)
+0

Chodź, wszyscy po prostu dał wskazówki w komentarzach, można dostarczyć kod! ?! To jest złe! : D – TheBlastOne

+1

Wyszukiwanie binarne działa tylko w przypadku posortowanej tablicy. –

+0

@AleksG, zarówno jego, jak i tablice OP wydają się być posortowane. będzie szybciej w ten sposób. – smerny

1

Twoje podejście Lista jest poprawna. Można zrobić coś takiego:

int[] values = {1, 3, 5, 7, 9, 12, 14, 16, 18, 19, 21, 23, 25, 27, 30, 32, 34, 36 }; 
List<Integer> list = new ArrayList<Integer>(); 
if(values.asList(list).contains(n)) { 
    ... 
} 
1
function arrayinside(n, listofn) { 
    var length = listofn.length; 
    for(var i = 0; i < length; i++) { 
     if(listofn[i] == n) return true; 
    } 
    return false; 
} 

spróbować tej

+0

To wygląda jak JavaScript i choć z pewnością rozwiązuje problem, to nie jest to odpowiednia odpowiedź, ponieważ OP wymaga porady na temat Javy. – maba

2

Spróbuj tego:

static private Set<Integer> set = new HashSet<Integer>(
    Arrays.asList(1, 3, 5, 7, 9, 12, 14, 16, 18, 19, 21, 23, 25, 27, 30, 32, 34, 36)); 

następnie do badania:

if (set.contains(n)) 

Korzystanie HashSet uczyni go wykonuj całkiem dobrze.

+0

Jeśli kolekcja zostanie ponownie wykorzystana, wówczas operacja zawijania HashSet będzie zdecydowanie lepsza. Jeśli jednak lista jest przeszukiwana tylko raz, jest to nieco wolniej. Zaletą skrótu jest przyspieszenie wyszukiwania, ale konstrukcja tabeli mieszającej wymaga sekwencyjnego skanowania tablicy. Jeśli przeszukasz tylko raz, możesz równie dobrze przeprowadzić wyszukiwanie liniowe. – Brandon

Powiązane problemy