3 votes

Numéros à 2 ou plusieurs chiffres avec délimiteurs en java

J'ai un programme de base qui fonctionne assez bien pour la saisie de nombres à un chiffre. Mais lorsqu'on calcule une expression à plusieurs chiffres, comme 1337 - 456 + 32, le programme n'avance pas... il fait comme si je n'avais rien fait. Il ne se fige pas et n'affiche pas de message d'erreur, il s'arrête simplement.

Voici le code :

import java.io.*;
import java.util.*;
public class Tester {
    public static void main(String args[]) {
        Scanner kb = new Scanner(System.in);
        System.out.print("Enter number: ");
        String s = kb.nextLine();
        Scanner sc = new Scanner(s);
        //Set delimiters to a plus sign surrounded by any amount of white space...or...
        // a minus sign surrounded by any amount of white space.
        sc.useDelimiter("\\s*");
        int sum = 0;
        int temp = 0;
        int intbefore = 0;

        if (sc.hasNext("\\-")) {
            sc.next();
            if (sc.hasNextInt()) {
                intbefore = sc.nextInt();
                int temper = intbefore * 2;
                intbefore = intbefore - temper; 
            }
        }
        if (sc.hasNextInt()) {
            intbefore = sc.nextInt(); //now its at the sign (intbefore = 5)
        }
        sum = intbefore;

        while (sc.hasNext()) {
            if(sc.hasNext("\\+")) { //does it have a plus sign?
                sc.next(); //if yes, move on (now at the number)
                System.out.println("got to the next();");

                if(sc.hasNextInt()) { //if there's a number
                    temp = sc.nextInt();
                    sum = sum + temp; //add it by the sum (0) and the sum of (5) and (4)
                    System.out.println("added " + sum);
                }
            }
            if(sc.hasNext("\\-")) {
                sc.next();
                System.out.println("got to the next();");

                if (sc.hasNextInt()) {
                    temp = sc.nextInt();
                    sum = sum - temp; //intbefore - temp == 11
                    System.out.println("intbefore: " + intbefore + "  temp: " + temp);
                    System.out.println("subtracted " + sum); // subtracted by 11
                }
            }
        }
        System.out.println("Sum is: " + sum);
    }
}

Aidez-moi à savoir pourquoi cela se produit et ce qu'il faut faire pour y remédier ? (J'utilise netbeans si cela peut aider)

Aussi, je suppose que l'entrée a un espace entre chaque nombre. Ex : 123 + -23 - 5

2voto

LPD Points 1542

J'ai essayé d'exécuter votre code et voici ce que j'ai trouvé.

Supposons que votre entrée soit 12+1.

Pas s c.hasNextInt() vous donnera 1 que vous affectez à intbefore .

Suivant le while La boucle dans votre code va devenir une boucle infinie parce que sc.hasNext() sera toujours vrai (et renvoie 2 dans ce cas) et ne correspond pas aux deux conditions if à l'intérieur de la balise while ce qui fait que votre code tourne en boucle infinie. Maintenant, allez-y et travaillez là-dessus. Tous les meilleurs.

1voto

Evgeniy Dorofeev Points 52031

Essayez de changer le dilimètre comme "\\s+" en premier lieu ou simplement utiliser celui par défaut

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X