Probleme en execution code java

Fermé
Hacker#1 Messages postés 76 Date d'inscription mardi 6 janvier 2009 Statut Membre Dernière intervention 20 avril 2010 - 1 mai 2009 à 12:26
scriptiz Messages postés 1424 Date d'inscription dimanche 21 décembre 2008 Statut Membre Dernière intervention 14 septembre 2023 - 1 mai 2009 à 15:04
Bonjour,
qaund j'execute mon code il ne donne aucun erreur mais quand je l'execute j'ai le message suivant
http://i653.photobucket.com/albums/uu255/osskan/1.jpg
interface Rangement
{
public void ajouter(Object o);
public Object retirer(int i);
public Object tete();
public int getTaille();
public void setTaille(int i);
public boolean estVide();
}
abstract class StructureDeDonnees implements Rangement{
public int nbObjets;

public void setTaille(int i)
{
nbObjets=i;
}
public int getTaille()
{
return nbObjets;
}
public boolean estVide()
{
if(nbObjets==0)
return true;
return false;
}
abstract public void ajouter(Object o);
abstract public Object retirer(int i);
abstract public Object tete();
}
class Tableau extends StructureDeDonnees
{
Object tab[]=new Object[getTaille()];

Tableau(int a)
{this.nbObjets=a;}

public void ajouter(Object o)
{
for(int i=0;i<tab.length;i++)
tab[i]=o;}

public Object retirer(int i)
{Object a = null;
 if(!estVide())
 {a=tab[i];
for(int j=i;j<tab.length-1;j++)
{tab[j]=tab[j+1];}
this.nbObjets--;}
return a;}

public Object tete()
{Object a;
 a=tab[0];
if(!estVide())
{this.nbObjets--;
for(int i=0;i<tab.length-1;i++)
{tab[i]=tab[i+1];}
 this.nbObjets--;
}
 return a;
}

public static void main(String args[])
{
Tableau t=new Tableau(3);
t.ajouter(3);
t.ajouter(2);
t.ajouter(1);
System.out.println(t.retirer(1));
}
}
A voir également:

3 réponses

scriptiz Messages postés 1424 Date d'inscription dimanche 21 décembre 2008 Statut Membre Dernière intervention 14 septembre 2023 425
1 mai 2009 à 12:45
Dans ta méthode retirer(int i) tu sort du tableau à la ligne 46 de ton code.

En gros c'est comme si tu créais un tableau de 10 éléments allant de 0 à 9 et que tu essayais d'accéder à l'emplacement 12 ou -3.

Vérifie donc ta méthode retirer pour être sur de ne pas sortir du tableau.
0
Hacker#1 Messages postés 76 Date d'inscription mardi 6 janvier 2009 Statut Membre Dernière intervention 20 avril 2010
1 mai 2009 à 14:37
pas une autre solution
0
scriptiz Messages postés 1424 Date d'inscription dimanche 21 décembre 2008 Statut Membre Dernière intervention 14 septembre 2023 425
1 mai 2009 à 15:04
Ma réponse est pourtant bonne, tu sort des limites de ton tableau étant donné que tu ne l'instancie même pas.
Qui plus est ta méthode en sortait quand même comme je l'avais dit.

C'est dommage que tu n'ai pas cherché par toi même, j'ai cependant corrigé ton code, bien qu'il est étrange et que je n'aurais pas fait ça de la même manière j'ai gardé ton optique :

Rangement.java
interface Rangement
{
	public void ajouter(Object o);
	public Object retirer(int i);
	public Object tete();
	public int getTaille();
	public void setTaille(int i);
	public boolean estVide();
}


StrucutreDeDonnees.java
abstract class StructureDeDonnees implements Rangement
{
	public int nbObjets;

	public void setTaille(int i)
	{
		nbObjets=i;
	}
	
	public int getTaille()
	{
		return nbObjets;
	}

	public boolean estVide()
	{
		return nbObjets == 0;
	}

	abstract public void ajouter(Object o);
	abstract public Object retirer(int i);
	abstract public Object tete();
}


Tableau.java
class Tableau extends StructureDeDonnees
{
	Object tab[]=new Object[getTaille()];

	Tableau(int a)
	{
		this.tab = new Object[a];
		this.nbObjets = 0;
	}

	public void ajouter(Object o)
	{
		this.tab[this.nbObjets++] = o;
	}

	public Object retirer(int i)
	{
		if(i < 0 || i >= this.nbObjets) return null;
			
		if(estVide()) return null;
			
		Object a = tab[i];
		
		for(int j=i;j<this.nbObjets-1;j++)
		{
			tab[j]=tab[j+1];
		}
		this.nbObjets--;
		return a;
	}

	public Object tete()
	{	
		Object a;
 		a=tab[0];
		if(!estVide())
		{
			this.nbObjets--;
			for(int i=0;i<tab.length-1;i++)
			{
				tab[i]=tab[i+1];
			}
			this.nbObjets--;
		}
		return a;
	}

	public static void main(String args[])
	{
		Tableau t=new Tableau(3);
		t.ajouter(3);
		t.ajouter(2);
		t.ajouter(1);
		System.out.println(t.retirer(2));
		System.out.println(t.retirer(0));
		System.out.println(t.retirer(1));
		System.out.println(t.retirer(0));
	}
}


Testé et fonctionnel bien que je le répète, tu devrais réfléchir à la façon dont tu retire des éléments, prévoir d'autres erreurs, genre si tu fais trop d'ajouts...
0