Choix de carte avec conditions

Fermé
Vlam041 Messages postés 7 Date d'inscription vendredi 10 janvier 2014 Statut Membre Dernière intervention 28 novembre 2016 - Modifié par KX le 23/11/2016 à 20:36
Vlam041 Messages postés 7 Date d'inscription vendredi 10 janvier 2014 Statut Membre Dernière intervention 28 novembre 2016 - 23 nov. 2016 à 22:10
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 :

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 :)

2 réponses

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
23 nov. 2016 à 20:43
Bonjour,

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.
0
Vlam041 Messages postés 7 Date d'inscription vendredi 10 janvier 2014 Statut Membre Dernière intervention 28 novembre 2016
23 nov. 2016 à 20:58
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.
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
Modifié par KX le 23/11/2016 à 21:27
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);
0
Vlam041 Messages postés 7 Date d'inscription vendredi 10 janvier 2014 Statut Membre Dernière intervention 28 novembre 2016
23 nov. 2016 à 22:10
Merci beaucoup de ta réponse, et bien écoute, nous n'avons pas de limite particulière au niveau des notions, (par ex j'ai utilisé les listes alors que l'on a jamais vu ni parler de ça)donc je vais essayer de le décortiquer, et essayer de le comprendre étape par étape pour voir comme il fonctionne !
0