comment puis-je écrire une boucle contrôlée par requête qui continuera à entrer des valeurs int de l'utilisateur, en ajoutant chacun à la somme de valeur, puis demander si l'utilisateur a une autre valeur à saisir, jusqu'à ce que l'utilisateur dit qu'il n'y a pas plus de valeursune boucle contrôlée par requête en Java
Répondre
double sum = 0;
while (user.hasMoreInput()) {
double += user.mostRecentInput();
}
où vous implémentez hasMoreInput
et mostRecentInput
à votre assimilation.
Hehe, sympa. +1 :) – Bombe
Exact. Mapping exigences pour le code est tellement sacrément facile :) –
Le Java Developer's Almanac est toujours une bonne source d'exemples de base tels que le vôtre. Edit: Apparemment, certaines personnes pensent qu'une démonstration de l'essentiel d'une technique devrait avoir une vérification d'erreur. Peut-être devrais-je aussi avoir commenté le code, et fourni une spécification. La prochaine fois, je développerai également des annotations personnalisées pour exprimer les conditions pré et post, ou rédiger une implémentation dans Eiffel.
+1: Bonne réponse, merci pour le lien! Mais j'exhorte les lecteurs à coder quelque chose d'utile dans le bloc 'catch'. Toutes sortes de frustrations de l'utilisateur résultent de cette pratique répréhensible d'avaler des exceptions. Je dirais que le code comme ceci ne devrait pas apparaître dans un Almanach; cela ne les aurait pas blessés d'inclure une ligne de code supplémentaire. –
Non, je le reprends. Le code est horrible! 'readLine()' est suivi de 'process (str)' sans vérification de null. Les gens qui codent comme ça n'ont pas d'almanachs d'écriture d'affaires. –
C'est une façon très étrange de faire un REPL - vous allez traiter une chaîne nulle lorsque vous atteignez EOF. Une utilisation plus idiomatique serait quelque chose comme 'prompt(); pour (String cmd; (cmd = in.readLine())! = null;) {processus (cmd); rapide(); } ' – gustafc
Voici comment j'écris une telle boucle. Je ne devrais pas écrire vos devoirs pour vous, mais je voudrais néanmoins démontrer mon style préféré pour ce genre de boucle.
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
while (true) {
System.out.print("> prompt ");
String str = in.readLine();
if (str == null) break;
process(str);
}
Certaines personnes peuvent ne pas aimer
while (true)
- il ressemble à une boucle infinie parce qu'elle est! Il est aussi infini que la patience de l'utilisateur en tapant l'entrée.- Ligne unique
if
- certaines personnes préféreraient en faire un 3-liner entièrement entre parenthèses. Mais je ne vois aucune utilité à cela; il ne devient pas plus lisible en conséquence. break
en milieu de boucle. C'est pour ça quebreak
est pour! C'est votre trappe d'échappement des boucles autrement infinies.
Si vous avez l'habitude de lire du code Java, ceci est idiomatique et lisible. Avantages:
- Il montre les étapes se déroulant exactement dans la séquence où elles se produisent;
- Il limite la portée de
str
à exactement où c'est nécessaire; - Il est très explicite sur la condition de terminaison;
- C'est très concis. Moins de lignes = moins de bugs, je dis toujours.
Il y a quelques pièces que vous devez manipuler. Tout d'abord, vous devez savoir comment recevoir les entrées de l'utilisateur. L'exemple de Java Developer almanach (http://www.exampledepot.com/egs/java.io/ReadFromStdIn.html) que je trouve ressemble à ceci:
try {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String str = "";
while (str != null) {
System.out.print("> prompt ");
str = in.readLine();
process(str);
}
} catch (IOException e) {
}
Vous pouvez remplacer « > invite » avec quelque chose de plus descriptif. Vous aimeriez également avoir un meilleur moyen pour l'utilisateur de quitter que d'entrer une ligne vide, alors demandez-lui d'entrer un «q» s'il a terminé. Ensuite, changez la comparaison dans la boucle while en quelque chose comme! Str.toLowerCase(). Est égal à ("q"). Ensuite, vous devez implémenter la fonction de processus pour convertir la chaîne en entier. Integer.parseInt (String) renverra la valeur entière d'un String qui représente correctement un entier (ie, "3" ou "49" mais pas "7e") et lancera une exception NumberFormatException sinon.Parce que vous ne voulez pas que votre application échoue avec une exception sur une mauvaise entrée, je pense que ce processus pourrait juste retourner 0 dans le cas d'une chaîne non-Integer (c'est-à-dire, quand vous attrapez une exception NumberFormatException). Enfin, vous voudrez avoir une variable somme initialisée avant votre boucle principale, et vous pouvez ajouter le résultat de process
à chaque itération. Ensuite, lorsque la boucle est terminée, vous pouvez imprimer le résultat de process
à l'écran en utilisant System.out.println. J'ai délibérément omis la plupart du code parce que cela ressemble à des devoirs, mais si vous pouvez comprendre tout cela assez pour le mettre ensemble, je pense que vous l'aurez appris assez bien pour le faire par vous-même.
prise vide? au moins faire un printStackTrace! ou ne pas attraper du tout ... le pire est de cacher l'erreur comme ci-dessus. –
Ce code est simplement copié verbatim à partir de ce lien, comme je l'ai mentionné ci-dessus. Et l'instruction catch ne manque pas son accolade proche, elle n'est tout simplement pas indentée. – danben
n'a pas dit quoi que ce soit à propos de l'absence de l'accolade ... –
Voici comment je le fais habituellement. aussi peu de code que possible :).
String s;
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
while((s = in.readLine()) != null)
process(s);
pas "aussi peu que possible", a remporté 2 lignes: 'while (processus (in.readLine()));' .... (ne dit pas que je le ferais de cette façon) –
bien, vous aurez besoin d'avoir un processus interne if (s! = null), il n'est donc pas clair si votre version est vraiment plus courte. –
était censé être une blague, mais je n'ai toujours pas besoin de la ligne 'String s;', et très probablement j'aurais une vérification (String vide) ou au moins une affirmation en cours ... :-) –
- 1. UNIQUE contrôlée par une colonne de bits
- 2. iFrame Navigation contrôlée par JS
- 3. Pourquoi ma requête POST interdomaine est-elle contrôlée en amont avec une requête OPTIONS?
- 4. bannière mouseover contrôlée par le texte
- 5. Multiget boucle en Java
- 6. Boucle imbriquée dans une boucle while - Java
- 7. boucle dans une requête SQL
- 8. Java en boucle/logique mathématique
- 9. UIScrollView dans une navigation contrôlée TabBar - IPhone
- 10. Création d'une file d'attente de threads java contrôlée
- 11. Stratégie de sélection multiple contrôlée par AJAX Stratégie
- 12. Compresser une requête HTTP en java
- 13. créer une requête sql en C++/java?
- 14. Hibernate Insérer une requête en Java
- 15. java imbriqué en boucle en utilisant readline
- 16. barre de progression Flex contrôlée par l'entrée du forum
- 17. boucle Foreach par ObservableCollection
- 18. Comment implémenter avec une boucle java?
- 19. Comment une boucle for est-elle structurée en Java?
- 20. Comment faire une boucle dans un tableau en Java?
- 21. Suppression personnalisée de Unique_ptr, suppression contrôlée
- 22. Java en boucle à chaque minute
- 23. Boucle à l'intérieur de l'ovale en Java
- 24. Java: alternative au sommeil en boucle?
- 25. Requête par datetime dans JDOQL/Java/GAE
- 26. tuer une boucle infinie dans Java
- 27. Javascript - en passant par la valeur dans une boucle
- 28. Comprendre pour chaque boucle en Java
- 29. requête de boucle d'interrogation php
- 30. suivi de boucle pour java
Est-ce que ce travail est fait? –