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;
}
}
4 réponses
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
.
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.
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.
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
Questions connexes
De nouvelles questions
java
Java est un langage de programmation de haut niveau. Utilisez cette balise lorsque vous rencontrez des problèmes pour utiliser ou comprendre la langue elle-même. Cette balise est rarement utilisée seule et est le plus souvent utilisée en conjonction avec [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] et [maven].