"bug" Scanner

Fermé
Epic_sans.fr - Modifié le 28 juin 2020 à 15:09
 Epic_sans.fr - 17 août 2020 à 00:09
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:
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:

1 réponse

KX Messages postés 16668 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 17 mars 2023 3 005
28 juin 2020 à 17:46
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.
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")
1
Epic_sans.fr
17 août 2020 à 00:09
Et bien merci, je ne savais point cela. ^^
0