"bug" Scanner
Epic_sans.fr
-
Epic_sans.fr -
Epic_sans.fr -
Bonjour, j'ai essayer de programmer un logiciel qui créer automatiquement des fonctions qui calculent le nombre x en Java pour mon année de 3 ème. Dans la boucle while, les sc.nextLine et sc.nextInt ne fonctionnent pas, s'il vous plaît aidez moiiiii T^T
le code:
EDIT : Ajout des balises de code
Cordialement, un développeur débutant.
le code:
import java.util.*; class Main { public static void main(String[] args) { int f =1; Scanner sc = new Scanner(System.in); System.out.print("Veuillez choisir la valeur de x. "); int x = sc.nextInt(); System.out.print("Veuillez choisir le nombre de tour que vous voulez faire. "); int t = sc.nextInt(); while(f!=t){ System.out.print("Vous êtes au tour "+f+" Veuillez entrer un option(multiplier, diviser, ajouter, soustraire) "); String calc = sc.nextLine(); if (calc==("multiplier")){ System.out.print("Vous êtes au tour "+f+". Veuillez choisir le nombre qui permettra de "+calc+" y à x "); int nb = sc.nextInt(); x = (x*nb); } if (calc==("diviser")){ System.out.print("Vous êtes au tour "+f+". Veuillez choisir le nombre qui permettra de "+calc+" y à x "); int nb = sc.nextInt(); if (nb == 0){ System.out.print("erreur, vous ne pouvez pas diviser un nombre par 0."); } else{ x = (x/nb); } } if (calc==("ajouter")){ System.out.print("Vous êtes au tour "+f+". Veuillez choisir le nombre qui permettra de "+calc+" y à x "); int nb = sc.nextInt(); x = (x+nb); } if (calc==("soustraire")){ System.out.print("Vous êtes au tour "+f+". Veuillez choisir le nombre qui permettra de "+calc+" y à x "); int nb = sc.nextInt(); x = (x-nb); } System.out.print(x); f+=1; } } }
EDIT : Ajout des balises de code
Cordialement, un développeur débutant.
Configuration: Linux / Firefox 77.0
A voir également:
- Scanner bug java
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Scanner qr code pc - Guide
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
1 réponse
Bonjour,
Le problème c'est qu'ici Scanner est utilisé avec le clavier. Or quand tu saisis un nombre pour valider tu appuis également sur la touche Entrée.
Mais nextInt ne lit que le nombre, pas la touche Entrée, donc une fois le nombre lu il reste encore la touche Entrée à lire.
Lorsque le programme arrive sur nextLine il lit la touche Entrée qui restait, au lieu de lire la ligne que tu voulais.
Le plus simple pour résoudre ton problème, c'est de faire suivre chaque nextInt d'un nextLine dont le seul but sera de récupérer la touche Entrée.
Remarque :
Le problème c'est qu'ici Scanner est utilisé avec le clavier. Or quand tu saisis un nombre pour valider tu appuis également sur la touche Entrée.
Mais nextInt ne lit que le nombre, pas la touche Entrée, donc une fois le nombre lu il reste encore la touche Entrée à lire.
Lorsque le programme arrive sur nextLine il lit la touche Entrée qui restait, au lieu de lire la ligne que tu voulais.
Le plus simple pour résoudre ton problème, c'est de faire suivre chaque nextInt d'un nextLine dont le seul but sera de récupérer la touche Entrée.
int t = sc.nextInt(); sc.nextLine();
Remarque :
calc==("multiplier")est faux, pour comparer la valeur de deux objets il faut utiliser la méthode equals :
calc.equals("multiplier")
Epic_sans.fr
Et bien merci, je ne savais point cela. ^^