Je viens de commencer la programmation Java et je me demandais comment aborder ou résoudre ce problème auquel je suis confronté.

Je dois écrire un programme qui demande à un utilisateur un nombre et additionne continuellement les nombres entrés et imprime le résultat. Ce programme s'arrête lorsque l'utilisateur entre "END"

Je n'arrive tout simplement pas à penser à une solution à ce problème, toute aide ou conseil tout au long de ce problème serait très apprécié et m'aiderait vraiment à comprendre des problèmes comme celui-ci. C'est le mieux que je puisse faire

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);

while (true) {
    System.out.print("Enter a number: ");
    int x = scan.nextInt();
    System.out.print("Enter a number: ");
    int y = scan.nextInt();

    int sum = x + y;


    System.out.println("Sum is now: " + sum);   

}   


}
    }   

La sortie est censée ressembler à ceci:

Entrez un nombre: 5

La somme est maintenant: 5

Entrez un nombre: 10

La somme est maintenant: 15

Entrez un nombre: FIN

0
utnicho 24 avril 2020 à 20:05

2 réponses

Meilleure réponse

Une solution serait de ne pas utiliser du tout la méthode Scanner # nextInt () mais utilisez plutôt la méthode Scanner # nextLine () et confirmez l'entrée du entrée numérique avec la méthode String # matches () avec un petit Expression régulière (RegEx) de "\ d +" . Cette expression vérifie si la chaîne entière ne contient que des chiffres numériques. Si tel est le cas, la méthode matches () renvoie true sinon elle renvoie false.

Scanner scan = new Scanner(System.in);
int sum = 0; 
String val = "";
while (val.equals("")) {
    System.out.print("Enter a number (END to quit): ");
    val = scan.nextLine();
    // Was the word 'end' in any letter case supplied?
    if (val.equalsIgnoreCase("end")) {
        // Yes, so break out of loop.
        break;
    }
    // Was a string representation of a 
    // integer numerical value supplied?  
    else if (val.matches("\\-?\\+?\\d+")) {
        // Yes, convert the string to integer and sum it. 
        sum += Integer.parseInt(val);
        System.out.println("Sum is now: " + sum);  // Display Sum
    }
    // No, inform User of Invalid entry
    else {
        System.err.println("Invalid number supplied! Try again...");
    }
    val = "";  // Clear val to continue looping
}

// Broken out of loop with the entry of 'End"
System.out.println("Application ENDED"); 

MODIFIER: en fonction du commentaire:

Étant donné qu'un entier peut être signé (c'est-à-dire: -20) ou non signé (c'est-à-dire: 20) et le fait qu'un entier peut être précédé d'un + < / strong> (c'est-à-dire: +20) qui est identique à non signé 20, l'extrait de code ci-dessus en tient compte.

1
DevilsHnd 25 avril 2020 à 04:43

Fais-le comme ça:

public static void main(String[] args) throws Exception {
    int sum = 0;
    Scanner scan = new Scanner(System.in);

    while (scan.hasNext()) {
        System.out.print("Enter a number: ");

        if (scan.hasNextInt())
            sum += scan.nextInt();
        else
            break;


        System.out.println("Sum is now: " + sum);
    }

    System.out.print("END");
}

Cela se terminera si l'entrée n'est pas un nombre (int).

Comme indiqué dans les commentaires, si vous souhaitez que le programme s'arrête lorsque l'utilisateur entre spécifiquement "END", modifiez l'instruction else - en:

else if (scanner.next().equals("END"))
    break;
1
Schred 24 avril 2020 à 18:22