Je veux supprimer les duplicats en les mettant dans un nouveau tableau, mais je reçois une première instance et un tas de zéros.
Voici mon code: P>
public class JavaApplication7 { public static void main(String[] args) { int[] arr = new int[] {1,1,2,2,2,2,3,4,5,6,7,8}; int[] res = removeD(arr); for (int i = 0; i < res.length; i++) { System.out.print(res[i] + " "); } } public static int[] removeD(int[] ar) { int[] tempa = new int[ar.length]; for (int i = 0; i < ar.length; i++) { if (ar[i] == ar[i+1]) { tempa[i] = ar[i]; return tempa; } } return null; } }
5 Réponses :
Quelques points pour vous aider: P>
1) avec ceci: 2) Parce que vous initialisez le deuxième tableau code> avec la longueur de l'original 3) Comme mentionné dans les commentaires, vous retournez le tableau code> une fois que le premier duplicate est trouvé, alors supprimez-le et renvoyez simplement le tableau 4) Vous obtiendrez également plusieurs 2S car lorsque vous vérifiez Ces points devraient vous aider à obtenir le résultat que vous désirez - si je (ou quelqu'un d'autre) vous tendit la réponse, vous n'apprendriez pas autant que si vous l'avez recherchée vous-même. P> pour (int i = 0; i
indexoutofboundsexception code> car vous vérifiez
[i + 1] code>. Astuce: Ce n'est que le dernier élément qui va causer cette ... p>
tableau code>, chaque non-dupliqué sera un
0 code> En cela, chaque élément est initialisé avec un
0 code> par défaut. Donc, peut-être que vous devez trouver combien de doublons il y a d'abord, avant de définir la taille. P>
code> à la fin de la fin de la. Méthode. P>
i code> avec
i + 1 code>, il trouvera 3 2S et mettre à jour
tempa code> Avec chacun d'eux, vous devrez donc déterminer comment ne pas inclure des doublons que vous avez déjà trouvés - en fonction de votre résultat attendu. P>
ici: qui crée un nouveau tableau de la même taille que l'entrant. Toutes les machines à sous sont initialisées avec 0s! P> Lorsque vous mettez ensuite des valeurs non-0 dans les premiers emplacements, sûres, celles-ci, mais aussi les 0 à tous les prochains emplacements que vous n'avez pas. t "toucher". p> Ainsi, vous devez donc utiliser une structure de données dans laquelle vous pouvez ajouter de manière dynamique de nouveaux éléments (comme liste / arrayliste) ou que vous devez premier fort> itérer le Array d'entrée Pour déterminer le nombre exact d'objets dont vous avez besoin, pour créer une matrice de taille appropriée, puis remplir ce tableau. P> P>
Déclaration de retour
Comme indiqué les deux commentateurs, vous revenez de la méthode dès que vous trouverez votre premier duplicata. Pour résoudre ce problème, déplacez le retour à la fin de la méthode. P>
Problèmes d'index p>
Vous rencontrerez ensuite un autre problème, un zéros p> Les zéros de votre sortie actuelle venir de l'initialisation. Vous initialisez votre Le code ci-dessous a les deux premiers problèmes résolus: P> arrayledexoutofboundSException code> parce que lorsque Vous vérifiez votre dernier élément (
i = ar.length-1 code>) qui dans votre exemple serait 11, vous comparez alors si
ar [11] == AR [12] Code > Mais
ar code> a la taille 12 de sorte que l'indice 12 est sorti des limites de la matrice. Vous pouvez résoudre celui-ci en modifiant votre condition de sortie de la boucle pour
i
tempa code> avec
int [ar.length] code> Ceci signifie dans la mémoire qu'il réservera de l'espace pour 12 INT qui sont initialisés avec zéro. Vous aurez le même problème après avoir résolu les deux problèmes ci-dessus. Votre sortie ressemblerait à ceci:
1 0 2 2 2 0 0 0 0 0 0 0 Code>. En effet, vous utilisez le même index pour tempa et ar. Vous pouvez résoudre ce problème de différentes manières. En utilisant une liste, filtrer le tableau après, etc. Cela dépend de ce que vous voulez faire exactement. P>
public class JavaApplication7 {
public static void main(String[] args) {
int[] arr = new int[] { 1, 1, 2, 2, 2, 2, 3, 4, 5, 6, 7, 8 };
int[] res = removeD(arr);
for (int i = 0; i < res.length; i++) {
System.out.print(res[i] + " ");
}
}
public static int[] removeD(int[] ar) {
int[] tempa = new int[ar.length];
for (int i = 0; i < ar.length - 1; i++) {
if (ar[i] == ar[i + 1]) {
tempa[i] = ar[i];
}
}
return tempa;
}
}
Il y a eu une erreur déjà mentionnée:
arr [i + 1] La condition doit être code> i + 1
- La matrice résultante peut être plus petite. LI>
ul>
SO: P>
public static int[] removeD(int[] ar) {
// Arrays.sort(ar);
int uniqueCount = 0;
for (int i = 0; i < ar.length; ++i) {
if (i == 0 || ar[i] != ar[i - 1]) {
++uniqueCount;
}
}
int[] uniques = new int[uniqueCount];
int uniqueI = 0;
for (int i = 0; i < ar.length; ++i) {
if (i == 0 || ar[i] != ar[i - 1]) {
uniques[uniqueI] = arr[i];
++uniqueI;
}
}
return uniques;
}
Pourquoi ne pouvez-vous pas utiliser Si vous voulez que votre tableau être commandé p> hashset code>?
Vous revenez immédiatement après avoir trouvé le premier duplicata.
Parce que vous retournez à l'intérieur i> la boucle!