Switch et do while

Résolu/Fermé
helloworld95 - 26 août 2017 à 17:25
 helloworld95 - 31 août 2017 à 22:43
Bonjour,

Dans le code suivant, je boucle directement après avoir choisi par exemple case 1 et ducoup je ne sais pas continuer la suite de mon programme car le menu reviens directement après.

		char stop = 'o';
		int choix = 0;
		do{
			
			System.out.println("Menu principal : Que voulez-vous faire?");
			System.out.println();
			System.out.println("1 ---> Ajouter un article au panier d'achats");
			System.out.println("2 ---> (PAS ENCORE DISPONIBLE) Supprimer un article du panier d'achats");
			System.out.println("3 ---> Voir tous vos articles");
			System.out.println("4 ---> Quittez le menu et enregistrez vos achats");
			
			choix = scanner.nextInt();
			
			switch (choix) {
			case 1: ajouterArticle();
				break;
			case 3: afficherPanier();
				break;
			}
			
			
		}while(stop != 'n');




A voir également:

1 réponse

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
26 août 2017 à 18:10
Bonjour,

Est-ce que tu pourrais mieux expliquer ta question et nous fournir le code complet ? Parce qu'en regardant le code que tu nous donnes je ne vois pas de problème, à part la valeur de stop que tu ne passes jamais à 'n'.
0
helloworld95
26 août 2017 à 22:55
Quand je veux ajouter le nom de l'article dans la methode ajouterArticle(), j'obtiens le scanner du choix et non le scanner du nomArticle

	public static void ajouterArticle(){
		int numero = panier.taille();
		System.out.println("Entrez le nom de l'article : ");
		String nomArticle = scanner.nextLine();

		Article article = new Article(nomArticle, numero);
		panier.ajouter(article);
		return;
	}
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
26 août 2017 à 23:18
"j'obtiens le scanner du choix et non le scanner du nomArticle"
Je n'ai toujours pas le code complet mais j'ai l'impression que c'est le même objet scanner que tu utilises dans les deux codes.

Le problème c'est que la méthode nextInt() ne fait pas ce que tu penses, car lorsque tu saisis un nombre au clavier, tu as des chiffres que la méthode nextInt() va lire et que tu utilises dans ton choix, mais au clavier tu appuies aussi sur Entrée pour valider ta ligne et c'est cette saisie là qui est lu par nextLine() dans ton code d'ajout d'articles.

La solution : quand tu utilises la classe Scanner avec le clavier il faut toujours utiliser la méthode nextLine() qui va prendre la ligne complète telle que tu la saisie lorsque tu appuies sur Entrée. Après si c'est censé être un entier tu le convertis, mais n'utilises pas directement la méthode nextInt() qui n'est pas pensé pour ce cas d'usage.

choix = Integer.parseInt(scanner.nextLine());

Remarque : dans ce cas c'est un peu dommage de convertir la valeur en entier, on pourrait très bien faire le switch sur le String correspondant à ligne saisie...

String choix = scanner.nextLine();

switch(choix) {
case "1":
    ajouterArticle();
    break;
case "3":
    afficherPanier();
    break;
}
0
helloworld95
27 août 2017 à 12:37
D'accord merci, par contre je ne comprend pas pourquoi après avoir fait 'o' pour continuer, il me remets le menu et me redemande directement si je veux continuer et ceci en boucle?

Menu principal : Que voulez-vous faire?

1 ---> Ajouter un article au panier d'achats
2 ---> (PAS ENCORE DISPONIBLE) Supprimer un article du panier d'achats
3 ---> Voir tous vos articles
4 ---> Quittez le menu et enregistrez vos achats
1
Entrez le nom de l'article :
test
Voulez-vous continuez? (o/n)
o
Menu principal : Que voulez-vous faire?

1 ---> Ajouter un article au panier d'achats
2 ---> (PAS ENCORE DISPONIBLE) Supprimer un article du panier d'achats
3 ---> Voir tous vos articles
4 ---> Quittez le menu et enregistrez vos achats
Voulez-vous continuez? (o/n)
1
Menu principal : Que voulez-vous faire?

1 ---> Ajouter un article au panier d'achats
2 ---> (PAS ENCORE DISPONIBLE) Supprimer un article du panier d'achats
3 ---> Voir tous vos articles
4 ---> Quittez le menu et enregistrez vos achats
Voulez-vous continuez? (o/n)
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
27 août 2017 à 14:41
Sans code impossible de t'aider...
0
helloworld95
27 août 2017 à 14:55
J'ai mis des next() au lieux de nextLine et ca me fait plus cette erreur, par contre dans le code d'ajout de la classe Panier j'ai une nullpointer quand je mais elem.getNom() dans me toString au lieu de elem.



public class Panier {
	
	private Article[] panier;
	private int nbArticles;
	private static final int TAILLE = 50;

	public Panier() {
		this.panier = new Article[TAILLE];
		this.nbArticles = 0;
	}
	
	public int taille(){
		return nbArticles;
	}
	
	public boolean ajouter(Article article){
		if (nbArticles == TAILLE)
			return false;
		panier[nbArticles] = article;
		nbArticles++;
		return true;
	}
	
	public String toString(){
		String aRenvoyer = "";
		for (Article elem : panier){
			aRenvoyer += elem.getNom() + " ";
		}
		return aRenvoyer;
	}
	
	/*public String toString(){
		String aRenvoyer = "";
		String poubelle =  "";
		for (Article elem : panier){
			if (elem == null){
				poubelle += elem + " ";
			}
			if (elem != null){
				aRenvoyer += elem + " ";
			}
		}
		return aRenvoyer;
	}*/

}




import java.util.Scanner;

public class TestPanier {
public static Scanner scanner = new Scanner(System.in);
public static Panier panier = new Panier();
	public static void main(String[] args) {
		
		char stop;
		String choix;
		do{
			
			System.out.println("Menu principal : Que voulez-vous faire?");
			System.out.println();
			System.out.println("1 ---> Ajouter un article au panier d'achats");
			System.out.println("2 ---> (PAS ENCORE DISPONIBLE) Supprimer un article du panier d'achats");
			System.out.println("3 ---> Voir tous vos articles");
			System.out.println("4 ---> Quittez le menu et enregistrez vos achats");
			
			choix = scanner.next();
			
			switch (choix) {
			case "1": ajouterArticle();
				break;
			case "3": afficherPanier();
				break;
			}
			
			System.out.println("Voulez-vous continuez? (o/n)");
			stop = scanner.next().charAt(0);
			
		}while(!(stop == 'n'));

	}// fin main
	
	
	public static void ajouterArticle(){
		int numero = panier.taille();
		System.out.println("Entrez le nom de l'article : ");
		String nomArticle = scanner.next();

		Article article = new Article(nomArticle, numero);
		panier.ajouter(article);
		return;
	}
	
	public static void afficherPanier(){
		if (panier.taille() == 0)
			System.out.println("Votre panier d'achats est vide.");
		System.out.println(panier.toString());
	}
	
}




Menu principal : Que voulez-vous faire?

1 ---> Ajouter un article au panier d'achats
2 ---> (PAS ENCORE DISPONIBLE) Supprimer un article du panier d'achats
3 ---> Voir tous vos articles
4 ---> Quittez le menu et enregistrez vos achats
1
Entrez le nom de l'article :
article1
Voulez-vous continuez? (o/n)
o
Menu principal : Que voulez-vous faire?

1 ---> Ajouter un article au panier d'achats
2 ---> (PAS ENCORE DISPONIBLE) Supprimer un article du panier d'achats
3 ---> Voir tous vos articles
4 ---> Quittez le menu et enregistrez vos achats
1
Entrez le nom de l'article :
article2
Voulez-vous continuez? (o/n)
o
Menu principal : Que voulez-vous faire?

1 ---> Ajouter un article au panier d'achats
2 ---> (PAS ENCORE DISPONIBLE) Supprimer un article du panier d'achats
3 ---> Voir tous vos articles
4 ---> Quittez le menu et enregistrez vos achats
3
Exception in thread "main" java.lang.NullPointerException
at Panier.toString(Panier.java:29)
at TestPanier.afficherPanier(TestPanier.java:51)
at TestPanier.main(TestPanier.java:26)
0