Choix de carte avec conditions
Vlam041
Messages postés
8
Statut
Membre
-
Vlam041 Messages postés 8 Statut Membre -
Vlam041 Messages postés 8 Statut Membre -
Bonjour,
dans le cadre d'un projet de programmation java (je suis en L1), nous devons transcrire en java un jeu de carte avec plateau (une matrice 4 4).
Une des premières étapes et de faire choisir 9 cartes à l'utilisateur parmi une liste que voici :
2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10.
Les conditions sont les suivantes (elles se déduisent simplement en regardant ce qui est dans la liste et du nombre de carte) : il n'est pas possible de choisir plus de 2 fois la même cartes, et l'utilisateur ne doit pas choisir plus de 9 cartes.
Dans ce cours n'avons vu que les boucles, les méthodes et les tableaux, mais en cherchant un peu j'ai découvert les listes, donc j'ai décidé d'utiliser les ArrayList, voici ce que j'ai fait :
Seulement ce code ne marche pas du tout : il demande à l'infini et se contente de réafficher la demande si la carte ne correspondant pas (je vois que mon code ne permet pas de demander ça néanmoins je ne sais pas comment faire)
Pourriez vous m'indiquer des pistes de réflexion ou bien des erreurs que j'aurai pu faire (c'est probable, la programmation même si j'aime ça c'est très laborieux chez moi !)
Merci :)
dans le cadre d'un projet de programmation java (je suis en L1), nous devons transcrire en java un jeu de carte avec plateau (une matrice 4 4).
Une des premières étapes et de faire choisir 9 cartes à l'utilisateur parmi une liste que voici :
2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10.
Les conditions sont les suivantes (elles se déduisent simplement en regardant ce qui est dans la liste et du nombre de carte) : il n'est pas possible de choisir plus de 2 fois la même cartes, et l'utilisateur ne doit pas choisir plus de 9 cartes.
Dans ce cours n'avons vu que les boucles, les méthodes et les tableaux, mais en cherchant un peu j'ai découvert les listes, donc j'ai décidé d'utiliser les ArrayList, voici ce que j'ai fait :
public static ArrayList choix(){
Scanner sc=new Scanner(System.in);
ArrayList <Integer> mainjoueur=new ArrayList <Integer>();
int valeur;
do{
do{
System.out.print("Veuillez choisir une carte de valeur comprise entre 2 et 10 (inclus) : ");
valeur =sc.nextInt();
}while (valeur>=2 && valeur<=10);
mainjoueur.add(valeur);
}while (mainjoueur.size()<9);
System.out.println(mainjoueur);
return mainjoueur;
}
Seulement ce code ne marche pas du tout : il demande à l'infini et se contente de réafficher la demande si la carte ne correspondant pas (je vois que mon code ne permet pas de demander ça néanmoins je ne sais pas comment faire)
Pourriez vous m'indiquer des pistes de réflexion ou bien des erreurs que j'aurai pu faire (c'est probable, la programmation même si j'aime ça c'est très laborieux chez moi !)
Merci :)
A voir également:
- Choix de carte avec conditions
- Carte d'identité - Accueil - Services publics
- Pile carte mere - Guide
- Liste déroulante de choix excel - Guide
- Changer de carte graphique - Guide
- Créer une carte avec des points - Guide
2 réponses
Bonjour,
Essaies donc plutôt
while (valeur>=2 && valeur<=10);est l'inverse de ce dont tu as besoin.
Essaies donc plutôt
while (valeur<2 || valeur>10);cependant ce code n'empêche pas de choisir plus de 2 fois le même chiffre.
Merci beaucoup de ta réponse !
Ca marche ! En faisant ça, ça demande 9 valeurs puis ça s'arrete, ce qui est un des but recherchés ! Super :)
Ne pourrait-on pas imaginer une autre méthode qui compare les valeurs présente dans la main du joueur et la valeur choisit pour redemander une valeur correct si jamais on demande plus de 2 fois une même valeur ? Néanmoins, même si l'idée est peut être bonne, je ne vois pas comment la mettre en œuvre.
Ca marche ! En faisant ça, ça demande 9 valeurs puis ça s'arrete, ce qui est un des but recherchés ! Super :)
Ne pourrait-on pas imaginer une autre méthode qui compare les valeurs présente dans la main du joueur et la valeur choisit pour redemander une valeur correct si jamais on demande plus de 2 fois une même valeur ? Néanmoins, même si l'idée est peut être bonne, je ne vois pas comment la mettre en œuvre.
Au risque d'aborder des concepts que tu ne connais pas encore, voici comment moi je ferai pour ce problème :
Map<Integer, Integer> pioche = new TreeMap<>();
for (int i = 2; i <= 10; i++)
pioche.put(i, 2);
List<Integer> mainjoueur = new ArrayList<>();
while (mainjoueur.size() < 9) {
System.out.println(pioche);
System.out.print("Veuillez choisir une valeur entre 2 et 10 : ");
int valeur = sc.nextInt();
Integer cpt = pioche.get(valeur);
if (cpt != null && cpt > 0) {
pioche.put(valeur, cpt - 1);
mainjoueur.add(valeur);
} else {
System.out.println("Cette valeur a été refusée, veuillez recommencer.");
}
}
System.out.println(mainjoueur);