Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

Redimensionner un tableau en Java


C.J.

Messages recommandés

Ben ..j'ai essaye et ca fonctionne toujours.....ca ne change rien

 

mais il y a toujours un probleme!....si je fais un affichage des valeur de ma pile....hmmm...elles s'affichent mais le programme s'arrete parce qu'il ya  tout de meme une erreur !

Bah ça fonctionne ou pas ? :P

Modifié par leneuf22
Lien vers le commentaire
Partager sur d’autres sites

en fait le programme fonctionne que tu mette le " tab2 = null; " ou pas....

mais pour le " ca ne fonctionne pas a l'affichage" c'est un autre probleme. Si tu veux...le programme fonctionnait mais quand j'essayais d'afficher les valeurs de la pile , j'obtenais comme resultat les valeurs de la pile ( donc ...les bonne...celle restant de la modification de la taille) et un message d'erreur qui me renvoyais a ma methode "affichage". j'ai donc modifie une valeur...et depuis ...ca ne va plus!......le programme fonctionne comme avant....je peux tout faire sauf la modification. j'ai pourtant "tout" remis en place !!!!

Lien vers le commentaire
Partager sur d’autres sites

En supprimant la liaison comme tu dis, c'est comme si tu disais "hé, GC !! viens me libérer mon tableau !"

Car il est clair pour le GC que la mémoire n'est plus utilisée, et donc il se charge lui-même de la libérer.

Ouais... enfin... lorsque le Garbage Collector se réveille il voit que ton tableau n'est plus référencé par aucune variable "vivante" et donc se permet de "remettre sur le marché" la mémoire qu'il utilisait...

Paske c'est pas le fait de mettre à NULL une variable qui va la faire bouger, cette grosse feignasse ;-D

 

Ca signifie donc que l'assertion comme quoi "tab2 = null" mettrait en péril tab parce qu'on a fait "tab = tab2" à la ligne avant n'est pas vraie : le GC ne libèrera pas la mémoire puisqu'elle est toujours d'actualité...

 

Ha béh non, justement, je viens de chercher un peu, tab et tab2 pointent vers la même zone mémoire.

Si tu supprimes tab2, tu supprimes tab (et inversement)

Souvenez-vous qu'en Java vous manipulez des handles, pas des pointeurs ni des variables... (puisque, je le rappelle, en Java "tout est un objet")

C'est pas parce qu'on valorise tab2 avec tab qu'ils sont liés "à la vie, à la mort" par la suite... tu peux réaffecter tab2 avec un autre tableau, tab ne bougera pas d'un iota ! (euh... d'un bit, je veux dire...)

Lien vers le commentaire
Partager sur d’autres sites

Alors voila ...apres une petite erreur de ma part lorsque j'ai donne la reponse concernant le redimensionnement.........voici comment redimensioner correctement la pile...que ce soit en ajoutant des cases ou en en supprimant : ( en clair , c'est la methode qui marche !! )

 

 

//*** Methode Redim ***/

static void Redim()

{

/*Declaration et initialisation du tableau permettant le transfert des valeurs

et l'agrandissement du tableau de depart */

int N;

System.out.println();

System.out.print("Entrez une taille pour la pile : ");

N = Lire.i();

 

int[] tab2 = new int [N];

 

int i = 0;

 

//Condition qui va tester si la valeur entree est superieure ou inferieure a la taille de tab

if (N > tab.length)

{

//Place les elements de tab dans tab2

for (i = 0; i < tab.length; i++)

{

tab2 = tab;

}//end for

}//end if

else

{

for (i = 0; i < N; i++)

{

tab2 = tab;

}//end for

 

//Decremente le sommet du tableau precedent(dans le cas ou il etait plus grand)

for (int j = sommet; j > i; j--)

{

sommet-- ;

}//end for

}//end else

 

//Efface le contenu de tab

tab = null;

 

tab = tab2;

 

//Message de confirmation

System.out.println(" *** TAILLE DE LA PILE MODIFIEE *** ");

System.out.println();

 

}//end Redim

 

 

 

Je vous remercie tous pour votre aide !

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...