Exception in thread "main" java.lang.ArrayIndexOutOfBoundsExcept

Résolu
khaledtotti -  
KX Messages postés 19031 Statut Modérateur -
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 !!!

2 réponses

KX Messages postés 19031 Statut Modérateur 3 020
 
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 Statut Membre
 
merciiiii beaucoup !!!!
0
khaledtotti Messages postés 2 Statut Membre
 
mais j'ai fais le import car j'ai besoin des classes string !!!
je peux en débarrasser ???
0
KX Messages postés 19031 Statut Modérateur 3 020
 
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