Exception in thread "main" java.lang.ArrayIndexOutOfBoundsExcept

Résolu/Fermé
khaledtotti - 21 avril 2013 à 13:27
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 - 21 avril 2013 à 18:38
Bonjour,

j'ai un examen de tp cette semaine et j'ai un probleme avec un programme !!
dans ce programme il ya 4 classe

-la classe ouvrage ;
-la classe livre derivé de la classe ouvrage ;
-la classe bibliotheque qui contient un tableau de livre ;
-et la classe main

classe ouvrage :


package application;
import java.util.* ;

public class Ouvrage {
private String datem ;
private static int reference=100 ;
private boolean etat ;
private static int nbreo=0 ;


public Ouvrage (String x)
{reference ++ ;
nbreo ++ ;
etat=false ;
datem=x ;
}
public String getdate()
{return datem ;
}

public int getref()
{return reference ;
}
public boolean getetat()
{return etat ;
}

public int getnbre()
{return nbreo ;
}

public void setdate (String s)
{datem=s ;
}
public void setetat (boolean s)
{etat=s ;
}
public void setref (int s)
{reference=s ;
}
public void setnbre (int s)
{nbreo=s ;
}

public void afficher()
{System.out.println(etat) ;
System.out.println(reference) ;
System.out.println(nbreo) ;
System.out.println(datem) ;
}


classe livre

package application;
import java.util.* ;

/**
*
* @author khaled
*/
public class livre extends Ouvrage {
private String auteur ;
private String titre ;
private String editeur ;
private int nbrep ;

public livre(String c,String d ,String t,String e , int z)
{super(c);
auteur=d ;
titre=t ;
editeur=e ;
nbrep=z ;
}

public String gettitre()
{return titre ;
}
public String getauteur()
{return auteur ;
}
public int getnbpage()
{return nbrep ;
}
public String getediteur()
{return editeur ;
}

public void settitre(String s)
{titre=s ;
}
public void setauteur(String s)
{auteur=s ;
}
public void setediteur(String s)
{titre=s ;
}
public void setnbrep(int s)
{nbrep=s ;
}

public void afficher()
{super.afficher() ;
System.out.println(titre);
System.out.println(auteur);
System.out.println(editeur);
System.out.println(nbrep);

}






}




class bibliotheque

package application;
import java.util.* ;
/**
*
* @author khaled
*/
public class bibliotheque {
private int indice;
private int n ;
private livre[] tab=new livre[n] ;

public bibliotheque(int x)
{n=x;
indice=0;}



public void ajout(livre l)
{if (indice<n)
{tab[indice]= l ;
indice++ ;}
else System.out.print("erreur");
}

public void supr(int ref)
{int s = -1 ;
for (int i=0;i<n;i++)
if (tab[i].getref()==ref)
s = i ;

if (s!=-1)
for (int i=s ;i<n-1 ;i++)
{tab[i]=tab[i+1];
}
n=n-1 ;
}

public void affiche()
{for (int i=0 ; i<n;i++)
tab[i].afficher();
}

public void emprunt(String titre , String date)
{for (int i=0 ;i<n;i++)
{if(tab[i].gettitre()==titre)
{if (tab[i].getetat()==false)
{ tab[i].setetat(true);
tab[i].setdate(date);

}
} } }

public void retour(String titre)
{for (int i=0 ;i<n;i++)
{if((tab[i].gettitre()==titre)&&(tab[i].getetat()==false))
tab[i].setetat(true);

}
}

}

class main


package application;
import java.util.* ;
/**
*
* @author khaled
*/
public class main {
public static void main(String[] args) {
bibliotheque x ;
x=new bibliotheque(6);
livre a;
a = new livre("khaled","asd","adas","qsd",6);
x.ajout(a);
}}



aidez moi SVP !!!
A voir également:

2 réponses

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
21 avril 2013 à 13:46
1) N'appelle pas ta classe "main", d'une part parce que normalement les noms de classe commencent par une majuscule (la remarque est donc valable pour tes autres classes), mais surtout parce ta méthode "main" aurait le même nom qu'un constructeur de la classe "main" ce qui n'est pas correct.

2) Tes import java.util.* sont tous inutiles puisque tu ne te sers jamais d'aucune classe de ce package...

3) Enfin, pour en revenir à ton ArrayIndexOutOfBoundsException, tu essayes de faire "tab[indice]=l" dans la méthode ajout de ta bibliothèque, mais ton tableau est de taille 0, car tu as fait sa déclaration comme ceci :

private int n; // 0 par défaut
private livre[] tab=new livre[n]; // le tableau est de taille 0

Il faudrait donc corriger la manière dont tu alloues la taille de ton tableau, parce que si tu modifies n après, ça ne modifieras pas automatiquement la taille de ton tableau !

Par exemple :

public bibliotheque(int x) 
{
	n = x; 
	tab = new livre[x];
	indice = 0;
}
1
khaledtotti Messages postés 2 Date d'inscription vendredi 16 octobre 2009 Statut Membre Dernière intervention 21 avril 2013
21 avril 2013 à 14:38
merciiiii beaucoup !!!!
0
khaledtotti Messages postés 2 Date d'inscription vendredi 16 octobre 2009 Statut Membre Dernière intervention 21 avril 2013
21 avril 2013 à 14:40
mais j'ai fais le import car j'ai besoin des classes string !!!
je peux en débarrasser ???
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
Modifié par KX le 21/04/2013 à 18:40
La classe String est dans java.lang !
Et avant que tu ne poses la question, ce n'est pas la peine d'importer java.lang.* ce package est automatiquement ajouté pour toutes les classes.
0