2009-12-21 3 views
-1

J'ai un tableauComment puis-je trouver des éléments impairs de deux tableaux

int a[] = {1,2,3}; 
int b[] = {1,2}; 

Comment puis-je trouver l'élément étrange dans le tableau

+0

votre question est incohérente, quel est le deuxième tableau pour? – Alon

+1

Bien sûr, vous cherchez un indice pour trouver des nombres impairs (1,3,5, ...) ou est-ce autre chose? –

+0

Je pense qu'il essaie de comparer les deux tableaux et de trouver les numéros uniques parmi eux. donc selon son exemple fourni la réponse doit être 3 .... – Hariharbalaji

Répondre

2
int[] longArray = { 1, 3, 2 }; 
    int[] shortArray = { 1, 2 }; 

    //Check which array is longer, if b longer than a then swap 

    for (int x:longArray){ 
     set.add(x); 
    } 
    for (int x:shortArray){ 
     if (set.contains(x)) 
      set.remove(x); 
    } 
    //odd numbers 
    for (Object i:set.toArray()) 
     System.out.println(i+","); 

J'ai mis deux réponses pour le vote, le précédent est boucles imbriquées et peut être lent pour les tableaux très longs. Dans la solution suivante, certains pourraient ne pas préférer le TreeSet.

+0

hey j'ai essayé de prendre List au lieu de définir mais je reçois runtime Exception IndexOutOfBoundException – Vipul

+0

L'exception se produit dans la méthode remove, car il prend un "index" si vous passez dans int (ce qui est le cas ici), si vous Si vous voulez utiliser remove comme celui de Sets, vous devrez passer un Object dit Integer, mais dans ce cas cela ne fonctionnera pas, car Integer (1)! = Integer (1). Retour au point principal, Listes permet les doublons. Les ensembles ne le font pas. Donc, en dehors de la "suppression de l'implémentation", il vaut mieux s'en tenir aux Sets à cause des doublons. – medopal

0

Faire une boucle pour chaque élément du tableau. Ceux pour lesquels item & 1 == 1 sont impairs.

+1

ou item% 2 = 0 – Paolo

+1

Probablement, vous voulez dire item% 2 == 1 – Vanya

+0

C'était une faute de frappe, je voulais dire '&', pas '%'. – Konamiman

1
int[] longArray = { 1, 3, 2 }; 
    int[] shortArray = { 1, 2 }; 

    //Check which array is longer, if b longer than a then swap 

    boolean found = false; 
    int odd = 0; 

    for (int i : longArray) { 
     for (int j : shortArray) { 
      if (i == j) 
       found = true; 
     } 
     if (!found) 
      odd = i; 
     found = false; 
    } 
    System.out.println(odd); 
0

Si vous parlez de comparaisons Set, un coup d'oeil à java-is-there-an-easy-quick-way-to-and-or-or-xor-together-sets

Cette question SO a parlé en termes de l'ensemble d'interface, mais l'interface List hérite également des méthodes pertinentes de collecte, de sorte que la copie vos tableaux aux objets ArrayList le rendent facile.

Si vous voulez garder uniquement au niveau du tableau natif, vous voudrez peut-être faire quelque chose comme:

public int[] findOddElement(int[] fromArray, int[] secondArray){ 
    int[] result = new int[fromArray.length]; 
    int resPointer = 0; 
    for (int i = 0;i < fromArray.length;i++){ 
    boolean notFound = true; 
    for (int j = 0; j < secondArray.length; j++) { 
    if (fromArray[i] == secondArray[j]) { 
    notFound = false; 
    break; 
    } 
    } 
    if (notFound){ 
    result[resPointer] = fromArray[i]; 
    resPointer++; 
    } 
    } 
    if (resPointer > 0 && resPointer < fromArray.length) { 
    int[] newResult = new int[resPointer]; 
    for (int i = 0;i < resPointer; i++) { 
    newResult[i] = result[i]; 

    } 
    return newResult; 
    } 
    return result; 
} 
+0

ArrayList n'implémente pas l'interface Set. La liste ne prolonge pas l'interface Set. List and Set sont deux extensions différentes de l'interface de collection. – ILMTitan

+0

Oui, mon mauvais: Les fonctionnalités utilisées dans la discussion XOR sont héritées à la fois par Set et List de l'interface Collection. Réponse éditée –

Questions connexes