Je suis en train de balayer un fichier d'arguments avec un commutateur dans un Stack
et il ignore des valeurs avec une commande .nextDouble
?Java Scanner nextDouble commande ignorer les valeurs avec le cas de commutateur?
Voici mon fragment de code:
while (stackScanner.hasNextLine()) {
switch(stackScanner.next()) {
case"+": {
operator= new operationNode("+");
stack.push(operator);}
case"-":{
operator= new operationNode("-");
stack.push(operator);}
case"*":{
operator= new operationNode("*");
stack.push(operator);}
case"/":{
operator= new operationNode("/");
stack.push(operator);}
case"^":{
operator= new operationNode("^");
stack.push(operator);}
while(stackScanner.hasNextDouble()) {
stack.push(new numberNode(stackScanner.nextDouble()));
}
}
Le problème est dans cette dernière ligne ici, où le fichier argument contient les éléments suivants: ^ 2 - 3/2 6 * 8 + 2.5 3
Cependant, le scanner ne recueille que: ^ 2 - 3/6 * 8 + 3
.
Donc, il saute les premiers nombres qui viennent dans une paire ici (2 et 2.5).
Cela est, quand j'ajoute stackScanner.next();
à la fin de la boucle while, les seuls chiffres qu'elle enregistre sont les valeurs 2 et 2.5?
Avez-vous remarqué que vous n'avez aucune pause dans vos cas, et que votre boucle while est dans l'instruction switch? –
@MauricePerry je l'avais par défaut: mais il ne lisait pas certaines valeurs. Les pauses ne semblent pas non plus avoir d'impact sur mon résultat (?) – Gege
Etes-vous sûr d'avoir posté le vrai code? Quand je le copie et le colle, je ne vois pas les résultats que vous dites. En particulier, ma pile ressemble à: '[, 2.0, -, *, /, ^, 3.0, /, ^, 2.0, 6.0, *, /, ^, 8.0, +, -, *, /, ^, 2.5, 3.0] ', ce qui est cohérent avec l'observation de @ MauricePerry selon laquelle il vous manque des instructions' break'. – DaveyDaveDave