0
votes

Dans le code Java i la méthode que j'ai créée ne pose que la première instance en double à un nouveau tableau

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;
    } 
}


2 commentaires

Vous revenez immédiatement après avoir trouvé le premier duplicata.


Parce que vous retournez à l'intérieur la boucle!


5 Réponses :


0
votes

Quelques points pour vous aider:

1) avec ceci: pour (int i = 0; i - Vous obtiendrez un indexoutofboundsexception car vous vérifiez [i + 1] . Astuce: Ce n'est que le dernier élément qui va causer cette ...

2) Parce que vous initialisez le deuxième tableau avec la longueur de l'original tableau , chaque non-dupliqué sera un 0 En cela, chaque élément est initialisé avec un 0 par défaut. Donc, peut-être que vous devez trouver combien de doublons il y a d'abord, avant de définir la taille.

3) Comme mentionné dans les commentaires, vous retournez le tableau une fois que le premier duplicate est trouvé, alors supprimez-le et renvoyez simplement le tableau à la fin de la fin de la. Méthode.

4) Vous obtiendrez également plusieurs 2S car lorsque vous vérifiez i avec i + 1 , il trouvera 3 2S et mettre à jour tempa 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.

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.


0 commentaires

0
votes

ici: xxx

qui crée un nouveau tableau de la même taille que l'entrant. Toutes les machines à sous sont initialisées avec 0s!

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".

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 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.


0 commentaires

0
votes

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 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 . P>

zéros p>

Les zéros de votre sortie actuelle venir de l'initialisation. Vous initialisez votre 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>

Le code ci-dessous a les deux premiers problèmes résolus: 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;
    }
}


0 commentaires

0
votes

Il y a eu une erreur déjà mentionnée:

  • retour quitte la méthode. Li>
  • avec 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;
    } 
    


0 commentaires

0
votes

Pourquoi ne pouvez-vous pas utiliser hashset ? xxx

modifier

Si vous voulez que votre tableau être commandé xxx


0 commentaires