Erreur execution java

Fermé
Wenzel Messages postés 225 Date d'inscription samedi 7 mars 2009 Statut Membre Dernière intervention 20 novembre 2012 - 17 déc. 2009 à 20:38
sandul Messages postés 3927 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 - 18 déc. 2009 à 10:31
Bonjour,
je code sous eclipse en java depuis peu, et j'ai là un code qui bug lorsque j'essaye de l'executer
voici la classe principale :

class Principale
{
public static void main(String args[])
{
// Tableau de produits
Produit [] produits = new Produit[7];
int i;

Article couche = new Article("Couches", 15.12);
Article yaourts = new Article("Yaourts natures", 1.67);
Article steak = new Article("Steak 200g", 3.43);
Boisson source = new Boisson("Eau de source", 1.12, 1.50);
Boisson soda = new Boisson("Cola 2 litres", 2.31, 2.00);
Alcool biere = new Alcool("Bière 8x25 cl", 4.31, 2.00, 4.5, .108);
Alcool vodka = new Alcool("Vodka 70 cl", 8.13, .7, 40, .155);

// On recopie les différents produits dans le tableau
produits[0] = couche;
produits[1] = yaourts;
produits[2] = steak;
produits[3] = source;
produits[4] = soda;
produits[5] = biere;
produits[6] = vodka;

// On affiche les caractéristiques des différents articles
System.out.println("Caractéristiques des articles\n------------------------------\n");

for (i = 0; i < 7; i++)
System.out.println(produits[i]);

// On affiche les prix des différents articles, en utilisant
// les méthodes getPrixTTC()
for (i = 0; i < 7; i++)
System.out.println(produits[i].getPrixTTC());

// On fait une commande
Commande c1 = new Commande(4, new Article [] {couche, yaourts, steak, biere}, new int [] {2, 3, 1, 2});

// Et une autre commande
Commande c2 = new Commande(6, new Article [] {yaourts, steak, source, soda, biere, vodka}, new int [] {1, 3, 12, 8, 5, 2});

// On affiche l'état des commandes
System.out.println("\n" + c1);
System.out.println("\n" + c2);

// On prépare des livraisons possibles
Livraison l3 = new Livraison (c1, 2.0);
Livraison l4 = new Livraison (c1, 35.0);
Livraison l5 = new Livraison (c1, 52.0);
Livraison l6 = new Livraison (c2, 120.0);
Livraison l7 = new Livraison (c2, 107.708);

// On affiche les caractéristiques des livraisons
System.out.println(l3);
System.out.println(l4);
System.out.println(l5);
System.out.println(l6);
System.out.println(l7);

}
}

et voici la classe Commande :

public class Commande extends Service{
// Attributs
private int nb_articles;
private Article [] tabArticles;
private int [] tabQuantite;
public static final int tMax = 10;

// Constructeur
public Commande (int nb, Article[] tabArt, int[] tabNb) {
super();
nb_articles = nb;
tabArticles = tabArt;
tabQuantite = tabNb;
}
// Méthodes
// getPrixTTC
public double getPrixTTC() {
double prix_commande = 0;
for(int i=0;i <= nb_articles;i++) {
prix_commande = prix_commande + tabArticles[i].getPrixTTC() * tabQuantite[i];
}
return prix_commande;
}
// ajoute
public void ajoute(Article art, int quant){
if(nb_articles < tabArticles.length) {
boolean ajoute = false;
int i=0;
while ((i <= tMax) && (ajoute == false)) {
if (tabArticles[i] == null) {
tabArticles[i] = art;
tabQuantite[i] = quant;
ajoute = true;
i++;

}
}
}
}
// toString
public String toString() {
String titre = "-- Article de la Commande n°"+getIdentifiant()+" --\n";
for (int j = 0; j < nb_articles; j ++) {

String comm = tabQuantite[j] + " x ( "+tabArticles[j]+"\n";
titre = titre.concat(comm);
}
String fincomm = "-- Fin de la Commande n°"+getIdentifiant()+", montant : "+this.getPrixTTC()+" --\n";
titre = titre.concat(fincomm);
return titre;

}
}


dans la classe Principale il ya une methode d'affiche de la commande c1, par system.out.println(c1);
mais la toString de commande beug et je ne comprend pas pk.

voici le code derreur de java :

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
at Commande.getPrixTTC(Commande.java:20)
at Commande.toString(Commande.java:48)
at java.lang.String.valueOf(Unknown Source)
at java.lang.StringBuilder.append(Unknown Source)
at Principale.main(Principale.java:44)

voilà, merci
A voir également:

4 réponses

sandul Messages postés 3927 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 723
17 déc. 2009 à 23:03
'Soir,

Essaie avec
for (int i=0; i < nb_articles; i++) { 
à la place de
for (int i=0; i <= nb_articles; i++) { 
.
++
0
grou29 Messages postés 39 Date d'inscription mardi 27 octobre 2009 Statut Membre Dernière intervention 19 mai 2010 9
17 déc. 2009 à 23:48
Erreur de debutant:
dans commande?java
for(int i=0;i <= nb_articles;i++) {

i ira de 0 à 4 ce qui fait 5 valeurs alors que t'a commande n'en comporte que 4
il faut mettre
for(int i=0;i < nb_articles;i++) {

il faut aussi savoir qu'en java tu peut connaitre facilement la taille d"un tableau en faisant par exemple
tabArt.length
tu peux donc enlever le paramètre "nb" de ta fonction commande

-
Grou29
http://lienssanslien.free.fr
0
Wenzel Messages postés 225 Date d'inscription samedi 7 mars 2009 Statut Membre Dernière intervention 20 novembre 2012 14
18 déc. 2009 à 10:13
Merci beaucoup pour votre soutien, c'était effectivement ca l'erreur d'exécution !

mon projet compile a présent et s'exécute parfaitement ! =)

j'aimerais approfondir ma connaissance du langage,
y a-t'il de bons tutos, bien documentés sur le langage java pour progresser rapidement, sur de bonnes bases ?

si oui, merci de me les indiqués

sinon, merci a l'équipe ;)
0
sandul Messages postés 3927 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 723
18 déc. 2009 à 10:31
Lis ceci de bout en bout: https://deitel.com/other-books/

Et par la suite, pour progresser, les Design Patterns seront indispensables :
- le classique https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612
- et une excellente version pour Java: https://www.amazon.com/Effective-Java-2nd-Joshua-Bloch/dp/0321356683/ref=sr_1_8?ie=UTF8&s=books&qid=1261128104&sr=1-8

Troisième étape: faudra approfondir des sous-domaines de la programmation Java. Par exemple, des technologies (exemple au hasard: Swing, pour écrire des applis autonomes) ou encore des frameworks (exemple au hasard: Spring, car il est à la mode et permet de faire pas mal de choses). En même temps, tu garderas un oeil attentif sur un (ou plusieurs, mais bon) IDE en essayant de profiter au maximum de ce qu'il(s) t'offre(nt) pour booster ta productivité.

Ce n'est pas vraiment une progression "rapide", là... Mais les bases seront excellentes et à long terme tu constateras que tu n'as pas perdu ton temps.

++
--
0