Trouver le nombre d'occurences apres une question dans un loop

Nakeele Messages postés 4 Date d'inscription mercredi 16 septembre 2015 Statut Membre Dernière intervention 11 octobre 2015 - 16 sept. 2015 à 02:19
Nakeele Messages postés 4 Date d'inscription mercredi 16 septembre 2015 Statut Membre Dernière intervention 11 octobre 2015 - 16 sept. 2015 à 18:08
Bonjour,

Je fais passer un loop en posant des questions. Les reponses sont des integers.
Je cherche à récupérer le nombre de fois où l'utilisateur rentre les chiffres.

J'ai du mal à faire un count. Je viens de VBA et suis nouveau sur java et j'ai un peu de mal. Merci !

Le code (si on peut appeler ca comme ca !) est vraiment pas bien fait.


import java.util.Scanner;
public class partie{
public static void main(String[] args){

// nom, prenom, age, niveau, partie en input
Scanner nom = new Scanner(System.in);
Scanner prenom = new Scanner(System.in);
Scanner age = new Scanner(System.in);
Scanner niveau = new Scanner(System.in);
Scanner jeu = new Scanner(System.in);
Scanner terminee = new Scanner(System.in);
Scanner temps = new Scanner(System.in);

int i = 1;
int counter = 0


System.out.print (" Entrer votre nom : ");
String monnom = nom.next (); // recupere nom

System.out.print (" Entrer votre prenom : ");
String monprenom = prenom.next (); // recupere prenom

System.out.print (" Entrer votre age : ");
int monage = age.nextInt (); // recupere age

do {


//String Afficheurnom = nom.nextLine();
//String Afficheurprenom = prenom.nextLine();
//String Afficheurage = demandeage.nextLine();
//String Afficheurniveau = niveau.nextLine();
//String Afficheurpartie = niveau.nextLine();

System.out.print (" Entrer votre niveau (1 = Facile; 2 = Moyen; 3 = Difficile) : ");

String niveaudedifficulte = "";
int monniveau = niveau.nextInt ();// recupere niveau

if (monniveau == 1) {
niveaudedifficulte = "Facile";
counter++;
} else if (monniveau == 2) {
niveaudedifficulte = "Moyen";
} else if (monniveau == 3) {
niveaudedifficulte = "Difficile";

} else {
System.out.println (" Cela ne correspond pas aux choix. Veuillez effectuer un choix entre 1 et 3"); }

System.out.print (" Partie gagnee ou perdue (1 = Gagnee; 2 = Perdue) : ");

String choixjeu = "";
int monjeu = jeu.nextInt ();// recupere jeu gagne ou perdu

if (monjeu == 1) {
choixjeu = "Gagnee";
} else if (monjeu == 2) {
choixjeu = "Perdu";
} else {
System.out.println (" Cela ne correspond pas aux choix. Veuillez effectuer un choix entre 1 et 2"); }

System.out.print (" Partie terminee ?(1 = Oui; 2 = Non) : ");

String choixterminee = "";
int monterminee = terminee.nextInt ();// recupere terminee oui ou non

if (monterminee == 1) {
choixterminee = "Oui";
} else if (monterminee == 2) {
choixterminee = "Non";
} else {
System.out.println (" Cela ne correspond pas aux choix. Veuillez effectuer un choix entre 1 et 2"); }

System.out.print (" Entrer votre temps: ");
int montemps = temps.nextInt (); // recupere temps


i++;
} while (i <= 3);


System.out.println (monnom + monprenom + monage + monterminee) ;

//System.out.println ("Statistiques Sudoku") ;
//System.out.println () ;
//System.out.println ("-------Informations personnelles");
//System.out.println ("Nom: " + monnom );
//System.out.println ("Prenom: " + monprenom );
//System.out.println ("Age: " + monage);
//System.out.println ();
//System.out.println ("Statistiques detaillees");
//System.out.println ();
//System.out.println ("Statistiques niveau facile");
//System.out.println ();
//System.out.println ("Nombre de parties non terminees: " + monterminee==2);
//System.out.println ("Nombre de parties gagnees: " + monjeu ==1 + "." + "Temps de resolution moyen: " + montemps );
//System.out.println ("Nombre de parties totales jouees : " + monterminee ==1 && monterminee ==2);
//System.out.println ("Taux de reussite du joueurs : " + ((monjeu ==1)/(monterminee ==1 && monterminee ==2)));


}
}


2 réponses

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 127
16 sept. 2015 à 07:45
Bonjour,

J'ai pas regardé en détail, mais plusieurs remarques :

Quand tu as une boucle i=1; do { ... i++ } while (i<=3); remplaces la par une boucle for (i=1; i<=3; i++) { ... } qui est beaucoup plus lisible puisque toute la mécanique de la boucle est définie sur la même ligne.

De même si tu as une structure avec des if (x==x1) { ... } else if (x==x2) { ... } else { ... } remplaces là par une structure de type switch(x) {case x1: ... ; break; case x2: ... ; break; default : ... }

Ensuite, ça ne sers à rien d'avoir plusieurs objets Scanner ouverts sur System.in, tu n'as qu'un seul clavier, donc un seul flux System.in, il est donc logique de n'avoir qu'un seul Scanner pour lire toutes les données.
1
m4cker Messages postés 65 Date d'inscription lundi 22 avril 2013 Statut Membre Dernière intervention 17 août 2016 1
16 sept. 2015 à 08:46
Cependant l'utilisation d'un unique Scanner engendre parfois des bugs.
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 127 > m4cker Messages postés 65 Date d'inscription lundi 22 avril 2013 Statut Membre Dernière intervention 17 août 2016
16 sept. 2015 à 09:15
Qu'est ce que tu appelles "bug" ?

Généralement les problèmes que je voie sur le forum quant à l'utilisation de Scanner est lié à l'alternance de nextInt (ou nextDouble etc) et de nextLine, où ce dernier renvoie une ligne vide au lieu de demander une saisie à l'utilisateur.
Mais ce n'est pas un bug, juste une mauvaise compréhension du fonctionnement de nextInt, les débutants s'attendent à avoir le même comportement que Integer.parseInt(sc.nextLine()) alors que ce n'est pas le cas.

De toute façon ici il ne devrait pas y avoir de problème vu que les nextInt sont en dernier.

Remarque : dans l'absolu je n'ai rien contre l'utilisation de plusieurs Scanner (s'ils sont configurés différemment par exemple) mais un Scanner identique pour chaque donnée à saisir c'est une erreur de compréhension du fonctionnement de Scanner.
0
m4cker Messages postés 65 Date d'inscription lundi 22 avril 2013 Statut Membre Dernière intervention 17 août 2016 1 > KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024
16 sept. 2015 à 09:32
Je me souviens plus exactement ça fait un moment que je ne fais plus de Java mais je pense que je devais vouloir me servir d'un même scanner pour des types différents ce qui devaient générer un bug.
0
Nakeele Messages postés 4 Date d'inscription mercredi 16 septembre 2015 Statut Membre Dernière intervention 11 octobre 2015
16 sept. 2015 à 16:28
Maintenant, il me reste plus qu'à trouver le moyen de "compter" le nombre partie gagnées etc... En VBA, on peut utiliser count mais j'ai pas vraiment trouvé l'équivalent aussi simple en java. Des indices SVP ? Merci par avance encore !
0
m4cker Messages postés 65 Date d'inscription lundi 22 avril 2013 Statut Membre Dernière intervention 17 août 2016 1
16 sept. 2015 à 18:00
Pour tout te dire j'ai du mal à comprendre ta question mais si je peux t'aider avec ça... :
Pour savoir combien de fois l'utilisateur rentre les chiffres (lesquels?) il faut que tu incrémente ta variable counter de 1 à chaque fois que l'utilisateur rentre les chiffres.
0
Nakeele Messages postés 4 Date d'inscription mercredi 16 septembre 2015 Statut Membre Dernière intervention 11 octobre 2015 > m4cker Messages postés 65 Date d'inscription lundi 22 avril 2013 Statut Membre Dernière intervention 17 août 2016
16 sept. 2015 à 18:08
par exemple, quand on demande "parties terminées ?" il rentre 1 ou 2 (pour oui ou non). On le demande 3 fois (par le loop) donc il faudrait compter le nombre de fois. Je vais essayer de modifier pour le variable counter.

Merci encore !
0
Rejoignez-nous