Donc, le problème est que j'ai deux tableaux et que je dois les vérifier pour les éléments communs.Trucs habituels, très faciles.Mais le plus délicat pour moi est que je dois renvoyer un autre tableau avec les éléments qui se sont avérés communs. n'utilisez pas de collections.Merci d'avance.C'est mon code pour l'instant!

public class checkArrayItems {
    static int[] array1 = { 4, 5, 6, 7, 8 };
    static int[] array2 = { 1, 2, 3, 4, 5 };

    public static void main(String[] args) {
        checkArrayItems obj = new checkArrayItems();
        System.out.println(obj.checkArr(array1, array2));

    }

    int[] checkArr(int[] arr1, int[] arr2) {
        int[] arr = new int[array1.length];
        for (int i = 0; i < arr1.length; i++) {
            for (int j = 0; j < arr2.length; j++) {
                if (arr1[i] == arr2[j]) {
                    arr[i] = arr1[i];
                }

            }
        }
        return arr;

    }

}
2
Симеон Пецанов 16 nov. 2017 à 14:40

4 réponses

Meilleure réponse

Vous pouvez utiliser une valeur factice par défaut MIN ou MAX pour les éléments de votre nouveau tableau arr en utilisant arr[i] = Integer.MIN_VALUE;. De cette manière, vous pourrez différencier les valeurs réelles et factices. Comme ci-dessous:

int[] checkArr(int[] arr1, int[] arr2) {
        int[] arr = new int[array1.length];
        for (int i = 0; i < arr1.length; i++) {
            arr[i] = Integer.MIN_VALUE;
            for (int j = 0; j < arr2.length; j++) {
                if (arr1[i] == arr2[j]) {
                    arr[i] = arr1[i];
                }

            }
        }
        return arr;

    }

Output

[4, 5, -2147483648, -2147483648, -2147483648]

EDIT

Conclusion Lorsque vous itérez sur arr, toutes les valeurs autres que -2147483648 sont communes.

MODIFIER 2

Pour imprimer les valeurs communes comme mentionné dans le commentaire ci-dessous:

public static void main(String[] args) {
checkArrayItems obj = new checkArrayItems();
int[] arr = obj.checkArr(array1, array2);
        System.out.println("Common values are : ");
        for (int x : arr) {
            if (x != Integer.MIN_VALUE) {
                System.out.print(x+"\t");
            }
        }
}

Suggestion: Suivez la convention de dénomination de la classe, c'est-à-dire rendez checkArrayItems à CheckArrayItems.

0
Shubhendu Pramanik 16 nov. 2017 à 12:47

Déclarer un index avant les deux boucles for

int index = 0;

Qui contiendra la position actuelle du tableau arr. Ensuite:

arr[index++] = arr1[i];

Et aussi, puisque vous initialisez le tableau avec arr1.length, votre tableau sera rempli de 0 à la fin de la non collision.

0
Marcos Vasconcelos 16 nov. 2017 à 11:48

Je suis paresseux pour taper le code, mais voici l'algorithme. 1. trier les deux tableaux 2. itérer sur le tableau en comparant les éléments et en augmentant les index.

J'espère que cela t'aides.

0
user3438137 16 nov. 2017 à 11:45

Au cas où quelqu'un se demanderait à quoi ressemble l'algorithme de "poursuite" mentionné par @ user3438137:

int[] sorted1 = Arrays.copyOf(array1, array1.length);
Arrays.sort(sorted1);
int[] sorted2 = Arrays.copyOf(array2, array2.length);
Arrays.sort(sorted2);
int[] common = new int[Math.min(sorted1.length, sorted2.length)];
int numCommonElements = 0, firstIndex = 0; secondIndex = 0;
while (firstIndex < sorted1.length && secondIndex < sorted2.length) {
    if (sorted1[firstIndex] < sorted2[secondIndex]) firstIndex++;
    else if (sorted1[firstIndex] == sorted2[secondIndex]) {
        common[numCommonElements] = sorted1[firstIndex];
        numCommonElements++;
        firstIndex++;
        secondIndex++;
    }
    else secondIndex++;
}
// optionally trim the commonElements array to numCommonElements size
3
Piotr Wilkin 16 nov. 2017 à 12:10
47328749