-1
votes

Calculer la somme du chiffre sous forme d'une doublure, l'entrée a 3 chiffres

Je dois calculer la somme du chiffre d'une chaîne (lecture via via Scanner) dans une doublure. De plus, je dois m'assurer que l'entrée n'est calculée que si l'entrée a exactement 3 chiffres.

Ce que j'ai eu jusqu'à présent: xxx

mais comment puis-je prouver dans cette doublure qu'il y a exactement 3 chiffres?


5 commentaires

Vous pouvez les matrices.Stramez la chaîne d'entrée complète, puis filtrez pour assortir la REGEX \ D {3} TOUTFIRSTRST -> Votre message d'erreur d'orelse?


Quel devrait faire le code s'il n'y a pas 3 chiffres?


Il suffit d'imprimer quelque chose comme "entrée non valide"


Par "une doublure", vous voulez dire une déclaration? Parce que vous pouvez écrire n'importe quel programme en une seule ligne en Java.


@HENRY, oui bien sûr


3 Réponses :


4
votes

envelopper votre code dans un en option qui utilise filtre () pour vérifier la longueur et orelse () pour fournir la sortie pour la mauvaise longueur entrée: xxx


Notez que vous pouvez remplacer: xxx

avec: xxx

ou, parce que vous avez exactement 3 chiffres, juste: xxx


1 commentaires

@Jan je vois ton point maintenant. J'ai changé le filtre au filtre (str -> str.matches ("\\ d {3}"))



2
votes

Cela pourrait être quelque chose comme ça. Coupes de ligne ajoutées pour Lisabiliy

public static void main(String... args) {
        System.out.print(
                //Make input into String-Stream
                Arrays.asList(new java.util.Scanner(System.in).nextLine()).stream()
                //Throw away averything not three digits
                     .filter(s -> s.matches("\\d{3}"))
                //Perform digit-sum (make it a String)
                    .map(e -> ""+e.chars().mapToObj(i -> ((char)i)-'0').reduce(0, (a,b)->a+b))
                //return this if there is something
                .findFirst()
                //Or give error message
                .orElse("No valid input!"));
    }


0 commentaires

1
votes

à quoi ça se passe. Le manque de sortie indique une mauvaise entrée (puisque vous ne spécifiez pas quoi faire dans ce cas).

System.out.println(Stream.of(new Scanner(System.in)
              .nextLine())
              .filter(a -> a.matches("\\d{3}"))
              .map(Integer::valueOf)
              .map(a -> a / 100 + (a / 10) % 10 + a % 10)
              // convert back to string
              .map(Object::toString)
              .findFirst()
              .orElse("Not 3 digits"));




0 commentaires