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 :

Supprimer un element du tableau


Sujet :

Collection et Stream Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 133
    Points : 64
    Points
    64
    Par défaut Supprimer un element du tableau
    Salut à tous!
    En fait je cherche à supprimer un élement d'un tableau d'entiers.J'ai par exemple:

    tab[0]=4
    tab[1]=5
    tab[2]=6
    tab[3]=7
    tab[4]=8

    la taille de mon tableau est 5.je veux supprimer par exemple 6 et me retrouver avec un tableau de taille 4.
    En fait j'ai pensé faire:
    tab[2]=tab[3]
    tab[3]=tab[4]

    Mais la difficulté c'est la case 4 qui contient l'element tab[4], comment pourrais je proceder pour supprimer cette case?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,
    En Java la taille d'un tableau est fixe, alors soit tu peux reéinstancier un nouveau tableau plus petit, soit (plus simple) tu utilises une List, avec son implémentation ArrayList notamment.
    Tschau

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 133
    Points : 64
    Points
    64
    Par défaut
    En fait je ne veux pas utiliser ArrayList, comme j'apprends à programmer je veux faire mes propres algo!
    Par contre je crois que ton idée est bonne de creer un nouveau tableau de taille plus petite dans lequel je pourrais mettre les valeurs que j'ai deplacés dans l'ancien tableau.Je vais essayer de faire ça dans ce sens.A tout à l'heure

  4. #4
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Créer un nouveau tableau de taille plus petite est couteux en temps. Si tu dois souvent modifier la taille du tableau, les performances vont rapidement s'effondrer.
    Je te suggère, à la place, de conserver une taille virtuelle du tableau. Lorsque tu supprimes une case, tu vas décrémenter la taille du tableau. Lorsque tu vas ajouter une case, tu vas incrémenter la taille du tableau. Si la taille virtuelle doit dépasser la taille réelle, alors tu crées un nouveau tableau plus grand, et la taille virtuelle peut à nouveau être plus petite que la taille réelle.
    C'est le fonctionnement de l'ArrayList.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 133
    Points : 64
    Points
    64
    Par défaut
    Qu'est ce que vous entendez par taille virtuelle du tableau?

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    tu stocke dans une variable, par exemple tailleTableau, la taille de ton tableau (par rapport aux nombre d'éléments réellement présent), mais cette variable aura toujours une valeur <= tableau.length. Ton tableau pourra donc contenir des cases vides à la fin, et quand tu parcourera ton tableau, au lieu de faire "pour i allant de 0 à tableau.length", tu fera "pour i allant de 0 à tailleTableau"

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 133
    Points : 64
    Points
    64
    Par défaut
    ok merci beaucoup tchize_, dinobogan, pour votre aide précieuse.Merci aussi aux autres pour vos contributions.Demain je vous presente ce que j'ai fait.A demain

  8. #8
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    570
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 570
    Points : 340
    Points
    340
    Par défaut
    Par contre, George7 il existe des langages où les tableaux sont dynamiques ?

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Citation Envoyé par Djobird Voir le message
    Par contre, George7 il existe des langages où les tableaux sont dynamiques ?
    En php par exemple, les "tableaux" sont d'utilisation très souples. Mais les notions derrière sont différentes...

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 133
    Points : 64
    Points
    64
    Par défaut
    Voi donc ce que j'ai fait par rapport à votre aide.Ca marche bien.Mais j'attends vos remarques.peut-être qu'il y a à faire mieux que ça.Je m'inquiète un peu pour la classe teste TestTableauAjout.java(la façon de tester n'est peut-être pas bonne.J'attends vos suggestions.Merci d'avance!

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    :
    class TableauAjout
    { int[] tab;
    int [] temp;	 
    int tailleTableau;	
     
    	public void setTab(int[] plc){
    		tab=plc;
    	tailleTableau=tab.length;
    		temp=plc;
    	}
     
    	public int [] getTab()
    	{
    		return tab;
    	}
     
    	public void ajouterElement(int x)
    	{  
    		//for( int i=0; i<tailleTableau; i++)
    		//{
    			if(tailleTableau>=tab.length)
    			{       //cellules.length=cellules.length-1;
    				//tailleTableau=tailleTableau+1;
    				tab = new int[tailleTableau+1];
     
    				for(int i=0; i<tailleTableau; i++)
    				{ tab[i]=temp[i];
    				System.out.println(tab[i]);
    				}
    				tab[temp.length]=x;
     
    				//for(int k=0; k<tab.length; k++)
    			        System.out.println(tab[temp.length]);
    				//	}
     
    			}
    			  		 }
     
    	  public void supprimerElement(int propo)
    	  { 
    	 	 for( int i=0; i<tailleTableau; i++)
    		{
    			if(propo==tab[i])
    			{     
     
    			for(int j=i+1; j<tailleTableau; j++)
    				{ 
    				tab[j-1]=tab[j];
    				//System.out.println(tab[j]);		
    			        }
    				tailleTableau=tailleTableau-1;	
    				for(int k=0; k<tailleTableau; k++)
    				{System.out.println(tab[k]);
    				}
    			}
    		}
    	  }
    }
     
     
    class TestTableauAjout
    {public static void main(String[] args)
    	{TableauAjout ta=new TableauAjout();
    		int [] plc={4,5,7,9,8};
    	        ta.setTab(plc);
    		ta.ajouterElement(2);
    		System.out.println(" ");
    		ta.setTab(ta.getTab());
    		ta.ajouterElement(3);
    		System.out.println(" ");
    		ta.supprimerElement(7);
    		//ta.ajouterElement(3);
    	}
    }

  11. #11
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    tu ne lit jamais ce qu'il y a dans ton tableau dans ton test. Si tu le faisait, tu remarquerais que tu as, dans la méthode ajouter, oublié d'augmenter tailleTableau

  12. #12
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    De plus la donnée membre "temp" est inutile et dangereuse : il y a duplication de données donc bug potentiel. Ca doit rester une variable locale à la méthode d'ajout. Voici la technique pour ajouter :

    1. création d'un tableau temporaire local de taille plus grande
    2. copie des données du tableau initial vers le tableau local en utilisant System.arraycopy
    3. affectation du tableau local vers le tableau des données
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 133
    Points : 64
    Points
    64
    Par défaut
    Voici donc ce que j'ai essayé de faire par rapport à vos conseils:

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    :
     
    class TableauAjout1
    { int[] tab;
    //int [] temp;	 
    int tailleTableau;	
     
    	public void setTab(int[] plc){
    		tab=plc;
    	tailleTableau=tab.length;
    		//temp=plc;
    	}
     
    	//public int [] getTab()
    	//{
    	//	return tab;
    	//}
     
    	public void ajouterElement(int x)
    	{  
     
    		//for( int i=0; i<tailleTableau; i++)
    		//tailleTableau=tailleTableau+1;
    			if(tailleTableau>=tab.length)
    			{    tailleTableau=tailleTableau+1;
    				int [] temp=new int[tailleTableau];    
    				//cellules.length=cellules.length-1;
    				//tailleTableau=tailleTableau+1;
    				//tab = new int[tailleTableau];
     
    				//for(int i=0; i<tailleTableau-1; i++)
    				//{ tab[i]=temp[i];
     
    				//}
    				System.arraycopy(tab,0,temp,0, tailleTableau-1);
    				temp[tab.length]=x;
    				//tailleTableau=tailleTableau+1;
    				 tab=temp;
    				//System.arraycopy(
    				for(int i=0; i<tailleTableau; i++){System.out.println(tab[i]);}	
     
    			}
    			  		 }
     
    	  public void supprimerElement(int propo)
    	  { 
    	 	 for( int i=0; i<tailleTableau; i++)
    		{
    			if(propo==tab[i])
    			{     
     
    			for(int j=i+1; j<tailleTableau; j++)
    				{ 
    				tab[j-1]=tab[j];
    				//System.out.println(tab[j]);		
    			        }
    				tailleTableau=tailleTableau-1;	
    				for(int k=0; k<tailleTableau; k++)
    				{System.out.println(tab[k]);
    				}
    			}
    		}
    	  }
    public static void main(String[] args)
    	{TableauAjout1 ta=new TableauAjout1();
    		int [] plc={4,5,7,9,8};
    	        ta.setTab(plc);
    		ta.ajouterElement(2);
    		System.out.println(" ");
    		//ta.setTab(ta.getTab());
    		ta.ajouterElement(3);
    		System.out.println(" ");
    		//ta.supprimerElement(7);
    		ta.ajouterElement(4);
    		System.out.println(" ");
    		ta.ajouterElement(23);
    	}
    }

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 133
    Points : 64
    Points
    64
    Par défaut
    Je l'ai encore fais d'une autre façon! mais là aussi ça marche:

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    :
    class TableauAjout2
    { int[] tab;
    //int [] temp;	 
    int tailleTableau;	
     
    	public void setTab(int[] plc){
    		tab=plc;
    	tailleTableau=tab.length;
    		//temp=plc;
    	}
     
    	//public int [] getTab()
    	//{
    	//	return tab;
    	//}
     
    	public void ajouterElement(int x)
    	{  
     
    		//for( int i=0; i<tailleTableau; i++)
    		//tailleTableau=tailleTableau+1;
    			if(tailleTableau>=tab.length)
    			{    int [] temp=tab;    
    				//cellules.length=cellules.length-1;
    				tailleTableau=tailleTableau+1;
    				tab = new int[tailleTableau];
     
    				//for(int i=0; i<tailleTableau-1; i++)
    				//{ tab[i]=temp[i];
     
    				//}
    				System.arraycopy(temp,0,tab,0, tailleTableau-1);
    				tab[temp.length]=x;
    				//tailleTableau=tailleTableau+1;
    				for(int k=0; k<tailleTableau-1; k++)
    			        {System.out.println(tab[k]);
    					}
    				//System.arraycopy(
    				System.out.println(tab[temp.length]);	
     
    			}
    			  		 }
     
    	  public void supprimerElement(int propo)
    	  { 
    	 	 for( int i=0; i<tailleTableau; i++)
    		{
    			if(propo==tab[i])
    			{     
     
    			for(int j=i+1; j<tailleTableau; j++)
    				{ 
    				tab[j-1]=tab[j];
    				//System.out.println(tab[j]);		
    			        }
    				tailleTableau=tailleTableau-1;	
    				for(int k=0; k<tailleTableau; k++)
    				{System.out.println(tab[k]);
    				}
    			}
    		}
    	  }
    }

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

Discussions similaires

  1. [langage] Supprimer un élément dans une liste
    Par myjuna dans le forum Langage
    Réponses: 15
    Dernier message: 06/08/2014, 11h49
  2. Supprimer un element d'un tableau de structure
    Par Fatima.zahra dans le forum Débuter
    Réponses: 1
    Dernier message: 11/06/2012, 12h42
  3. Réponses: 5
    Dernier message: 23/11/2009, 15h49
  4. supprimer un element d'un tableau vector
    Par boby61 dans le forum SL & STL
    Réponses: 22
    Dernier message: 23/03/2005, 20h49
  5. trier un tableau et compter des elements du tableau
    Par remi51 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 17/06/2002, 16h51

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