IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

Effacer un élément d'un tableau


Sujet :

Collection et Stream Java

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2013
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Janvier 2013
    Messages : 74
    Points : 40
    Points
    40
    Par défaut Effacer un élément d'un tableau
    Je n'arrive plus à retrouver une méthode pour effacer un int d'un tableau.
    Qu'est-ce qui cloche ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    public class elimineInt {
    	public static int [] deplaceTab(int [] arrivees, int n){
    		for(int i=n; i<arrivees.length; i++){
    			if(arrivees[i]==n){
    				while (i<arrivees.length-1){
    					arrivees[i]=arrivees[i+1];
    				}
    				arrivees[arrivees.length-1]=0;
    			}
    		}
    		return arrivees;
    	}
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		int[]arrivees ={3, 2, 1};
    		int n=3;
    		arrivees=deplaceTab(arrivees, n);
    		for (int i=0; i<arrivees.length; i++){
    			System.out.println(arrivees[i]);
    		}
    	}
    }

  2. #2
    Membre émérite
    Avatar de olivier.pitton
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2012
    Messages
    355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 355
    Points : 2 814
    Points
    2 814
    Par défaut
    Plop,

    Le problème ici est que tu spécifies que le n en paramètre de ta méthode est 3.

    Lorsque tu fais ta boucle for, elle se traduit par

    Ce qui fait que tu ne fais rien.

    Sinon pour supprimer une occurence du tableau tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public static void remove(int[] tab, int val) {
      for(int i = 0 ; i < tab.length ; i++) {
        if(tab[i] == val) {
          tab[i] = 0;
        }
      }
    }
    en partant du principe que si l'on a 0, alors la valeur à l'indice spécifiée est vide, non initialisée.

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2013
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Janvier 2013
    Messages : 74
    Points : 40
    Points
    40
    Par défaut
    Merci beaucoup, j'ai aussi besoin de déplacer les autres éléments vers le début du tableau, d'où ma boucle while.

    Voilà ce qui fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    	public static int[] deplaceTab(int[] tab, int val) {
    		  for(int i = 0 ; i < tab.length ; i++) {
    		    if(tab[i] == val) {
    		     while (i<tab.length-1){
    		    	 tab[i]=tab[i+1];
    		    	 i++;
    		     }
    		     tab[tab.length-1]=0;
    		    }
    		  }
    		  return tab;
    		}

  4. #4
    Membre émérite
    Avatar de olivier.pitton
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2012
    Messages
    355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 355
    Points : 2 814
    Points
    2 814
    Par défaut
    Attention, ici tu ne prends en compte qu'une seule occurence. Si tu possèdes deux valeurs identiques dans le tableau, tu n'en prendras qu'une seule en compte.

    Dès lors que tu rentres dans ta boucle while, plus rien ne peut t'en faire sortir (puisque ton i va jusqu'à la fin, donc tu sors du for au-dessus). Donc tu peux copier une valeur que tu dois supprimer.

    Par exemple si tu as : {1, 2, 3, 2} tu te retrouveras avec {1, 3, 2} si tu veux supprimer les 2.

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 621
    Points
    21 621
    Par défaut
    Citation Envoyé par astran Voir le message
    Merci beaucoup, j'ai aussi besoin de déplacer les autres éléments vers le début du tableau, d'où ma boucle while.
    Pour ce genre de décalage, tu as System.arrayCopy() le même tableau étant à la fois source et destination, avec un décalage de 1.

    Tout cela serait plus simple avec un ArrayList<Integer> ou, si tu as souvent besoin de supprimer/insérer mais pas d'accéder, avec une LinkedList<Integer>.
    Mais sur des très grands ou très nombreux tableaux, ça charge plus la mémoire et le garbage collector, et c'est aussi nettement moins performant.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Effacer un élément d'un tableau
    Par Seb2913 dans le forum C#
    Réponses: 5
    Dernier message: 07/03/2015, 08h18
  2. Recherche élément médian dans tableau non trié
    Par chicorico dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 27/05/2009, 17h39
  3. Effacer un élément d'un tableau (connaissant sa valeur)
    Par skaraa dans le forum Windows Forms
    Réponses: 1
    Dernier message: 21/11/2007, 16h06
  4. Supprimer un élément d'un tableau
    Par CaptainChoc dans le forum Langage
    Réponses: 15
    Dernier message: 23/12/2002, 23h14
  5. Réponses: 3
    Dernier message: 16/12/2002, 16h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo