corrigé sur le menu : petits soucis...

Modérateurs : F. Barthélemy, eric.soutil

Verrouillé
V.B.fod31
Messages : 83
Inscription : 10 févr. 2014 12:58

corrigé sur le menu : petits soucis...

Message par V.B.fod31 » 20 nov. 2016 18:43

Bonjour, en faisant la trace du corrigé, je me rend compte qu'il y a un souci dans le programme :

Nous avons le code suivant (les commentaires sont de moi, je ne sais pas si ils sont juste....)
try
{
mt[0] = new Menu("Que voulez-vous faire ?", st1);
mt[1] = new Menu("Quelle est votre couleur préférée ?", st2);
mt[2] = new Menu("Trouvez l’intrus.", st3);
}
catch(NPasBon ex){}//erreur attrapée mais rien ne s'affiche...
//le programme continu : (enfin je crois...)
for(int i=0; i<5; i++) // de 0 à 4 (5 fois)
...................

J'ai regardé à quel moment cette erreur est lancée :
C'est dans le constructeur de Menu qui n'accepte que les tableaux de taille <9
J'ai donc modifié le programme pour faire fonctionner cette erreur.

J'augmente le tableau des couleurs avec une taille de 10 (les couleurs préférées).
A l’exécution, le programme affiche :

Que voulez-vous faire ?
Partir loin : tapez 1
Rester au lit : tapez 2
Se lever : tapez 3
Entrez votre choix:2
Exception in thread "main" java.lang.NullPointerException
at Exo_15_3.main(Exo_15_3.java:28) // c'est à dire ligne ou il est marqué mt[i % 3].executerMenu(); dans :

for(int i=0; i<5; i++) // de 0 à 4 (5 fois)
{
do
{
try
{
saisieOk = true;
mt[i % 3].executerMenu(); // erreur NullPointerException
}

===========
Pour mieux comprendre ce qui se passe j'ai ajouté un catch en dessous de :
do
{
try
{
saisieOk = true;
mt[i % 3].executerMenu(); // NullPointerException est envoyée
}
catch(NullPointerException ex)
{
Terminal.ecrireString("erreur code");
}
et a l’exécution il m'a affiché "erreur code" en boucle à l'infini.
J'ai compris que c'était parce que while(!saisieOk); est toujours faux...

J'ai donc essayé de tout mettre dans un try comme ceci :

class Exo_15_3_test
{
public static void main(String[] args)
{
//initialisation des variables
String[] st1 = {"Partir loin", "Rester au lit", "Se lever"}; //choix du menu 1
String[] st2 = {"Rouge", "Vert", "Bleu", "Jaune", "Violet", "marron", "rose", "orange","noir", "blanc", }; //choix du menu 2
String[] st3 = {"Canard", "Poule", "Pintade", "Oie", "Dinde", "Pleiad"}; //choix du menu 3
Menu[] mt = new Menu[3]; //tableau de type menu
boolean saisieOk;
try //mon try ajouté
{
try
{
mt[0] = new Menu("Que voulez-vous faire ?", st1);
mt[1] = new Menu("Quelle est votre couleur préférée ?", st2);
mt[2] = new Menu("Trouvez l’intrus.", st3);
}
catch(NPasBon ex)
{
Terminal.ecrireStringln("erreur N Pas Bon"); // j'ai ajouté cette phrase histoire de voir que le programme passe bien par là
}

//le programme continu :
for(int i=0; i<5; i++) // de 0 à 4 (5 fois)
{
do
{
try
{
saisieOk = true;
mt[i % 3].executerMenu(); // affiche le menu
}
catch(HorsIntervalle ex)
{
Terminal.ecrireString("Vous devez entrer un");
Terminal.ecrireStringln("des choix proposés.");
saisieOk = false;
}
catch(PasNombre ex)
{
Terminal.ecrireStringln("Vous devez entrer un nombre.");
saisieOk = false;
}
catch(NullPointerException ex)
{
throw new NullPointerException();
}
}
while(!saisieOk);
}
}
catch(NullPointerException ex) //mon catch pour eviter l'arret du programme
{
Terminal.ecrireString("erreur Null Pointer Exception");
}
}
}

A l’exécution il se passe ceci :

une erreur N Pas Bon est survenue
Que voulez-vous faire ?
Partir loin : tapez 1
Rester au lit : tapez 2
Se lever : tapez 3
Entrez votre choix:3
une erreur Null Pointer Exception est survenue (j'aurai pu mettre "votre tableau est trop grand")

Ça marche :D

C'est bien cela que vous vouliez ?
Je ne sais pas si l'explication de mon cheminement pour y arriver était claire :(

Verrouillé

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité