Enlever un objet d'un tableau en java [Résolu/Fermé]

Signaler
-
 karakal -
Bonjour,
Je bloque sur un truc, je voudrais enlever un objet d'un tableau sans utiliser les collections. Voila ce que j'ai fait et ça ne marche pas! je vous remercie d'avance!!

int longueur = 10;
Objet[] objets = new Objet[longueur];
Objet[] temp = new Objet[longueur];
for(int j = i+1; j == longueur-1; j++){
objets[i-1]=temp[i];
}



1 réponse

Messages postés
16100
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
7 janvier 2020
2493
Là, il y a plusieurs choses qui clochent, où est la déclaration de i ? quel est le tableau de départ et celui d'arrivé ? pourquoi objets et temp ont-ils la même taille ?

Je te conseille de faire une méthode pour faire cette manipulation, ce sera plus clair.
La confiance n'exclut pas le contrôle
Desole ce n'est qu'un petit bout de mon code, la déclaration de i a été faite ailleurs le tableau d'arrivée est objets. En gros Je veux supprimer un élément de objets. Pour cela je crée temp que est une copie de objets et je veux décaler les éléments dans temps voici la méthode sur laquelle je travaille! merci!

public Objet retirer(Objet obj){
int i = 0;
Objet objet = null;
Objet[] temp = new Objet[longueur];
while(!objets[i].equals(obj) && i < longueur){
i++;
}
if(i == longueur)
System.out.println("L'objet n'existe pas dans la piece!!");
else{
objet = objets[i];
for(int j = i+1; j == longueur-1; j++){
objets[i-1]=temp[i];
}
}
return objet;
}
//objets a été déclaré avant!
KX
Messages postés
16100
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
7 janvier 2020
2493
Il y aurait plein de choses à dire sur ce code, mais entre autre choses, il n'est pas normal que tu ais la même longueur pour les deux tableaux alors que tu enlèves un élément, en plus tu utilises une variable "longueur" sans qu'on ne sache trop d'où elle sort, sans oublier ta condition d'arrêt dans la boucle for, qui évidement ne pourra pas fonctionner...

Comme je n'ai pas trop envie de tourner autour du pot, voici une méthode qui devrait faire pareil, j'espère que tu la comprendras...

public static Objet retirer(Objet obj)
{
	Objet objet = null;
	
	Objet[] temp = new Objet[objets.length-1];
	
	for (int i=0; i<objets.length; i++)
	{
		if (objet==null)
		{
			if (objets[i].equals(obj))
			{
				objet = obj;
			}
			else if (i<objets.length-1)
			{
				temp[i] = objets[i];
			}
		}
		else
		{
			temp[i-1]=objets[i];
		}
	}
	
	if (objet != null)
		objets = temp;
	
	return objet;
}