Comment calculer la somme de tous les 'chiffres impairs d'une entrée' en utilisant 'loop'. (Par exemple, si l'entrée est 32677, la somme serait 3 + 7 + 7 = 17.)
Je n'arrive pas à comprendre comment faire cela, quelqu'un peut-il m'aider s'il vous plaît. C'est ce que j'ai fait jusqu'à présent, je ne sais pas comment le compléter ou si j'ai son vrai ou son faux.
Toute aide serait appréciée!
System.out.println("Enter a number: ");
String input = in.nextLine();
int length = input.length();
int sum = 0;
int digits = 0;
for (int i = 0; i < length; i++) {
if (length % 2 == 1) {
digits += i;
sum = digits++;
}
}
System.out.println(sum);
4 Réponses :
Votre interprétation des chiffres à l'intérieur de l'entrée ne fonctionne pas de cette façon.
System.out.println("Enter a number: ");
String input = in.nextLine();
int length = input.length();
int sum = 0;
for (int i = 0; i < length; i++) {
int digit = input.charAt(i) - '0';
if (digit % 2 == 1) {
System.out.println("Add digit: " + digit);
sum += digit;
}
}
System.out.println(sum);
Salut Milgo, que fait +1 exactement dans ce code spécifique: Integer digit = Integer.valueOf (input.substring (i, i + 1)); Je suis juste intéressé et je veux apprendre
Vous obtenez une partie d'entrée, une sous-chaîne, entre deux indices. Vous commencez par le caractère à l'index i et vous terminez à l'index i + 1, donc à la fin vous n'obtenez qu'un seul caractère. Je préférerais charAt (i), mais cela renvoie un «char» qui est mal interprété comme un entier.
@Milgo, vous pourriez également utiliser charAt , et il serait encore plus simple d'obtenir la valeur du chiffre: int digit = input.charAt (i) - '0'; :)
@AlexRudenko La sortie montre une sortie totalement fausse, est-ce que je fais quelque chose de mal avec votre chemin?
@ chabztar01, veuillez clarifier. La version initiale et la version mise à jour fonctionnent correctement pour les nombres entiers sans séparateurs décimaux ou milliers. Avez-vous essayé de saisir un nombre non entier contenant d'autres caractères que des chiffres?
@AlexRudenko Je l'ai changé comme suit: System.out.println ("Entrez un nombre:"); Entrée de chaîne = in.nextLine (); longueur int = entrée.longueur (); somme int = 0; for (int i = 0; i
@AlexRudenko désolé, ça a l'air si compliqué quand j'ai mis le code dans le commentaire
@ chabztar01, vous devez soustraire la valeur de
'0' comme il est écrit ci-dessus pour convertir un caractère '0', '1', .. '9' en nombre entier 0, 1, 2, .. 9
Vous n'avez pas besoin d'utiliser String si votre entrée n'est pas si longue. également pour la sécurité, utilisez un type de données long. Voici le code de travail avec des commentaires (expliquez chaque étape).
long sumOddDigits(long value){
long temp = value; // copy in temp variable
long sum = 0;
while(temp > 0){
int digit = temp%10; // get last digit of number. example: 227 gives 7.
temp = temp / 10; // remove that last digit from number.227 will be 22.
if(digit % 2 == 1){
sum += digit;
}
}
return sum;
}
Je pense que c'est une très bonne solution car vous n'avez besoin d'aucune conversion de données. Si vous utilisez cette solution, vous pouvez également utiliser Scanner.nextInt () et Scanner.hasNextInt () pour vous assurer que l'utilisateur ne peut saisir que Integer code > valeurs et capture les entrées qui ne sont pas des valeurs Integer .
Dans votre boucle, utilisez Integer.parseInt (input.charAt (i)) pour obtenir le nombre à la position i.
if (length% 2 == 1) { cela n'a pas de sens ici. Vous voulez vérifier si votre nombre est impair, pas la longueur de votre chaîne.
Voici une solution basée sur Java8:
final int result = input.chars()//make a stream of chars from string
.mapToObj(String::valueOf) // make every character a String to be able to use parseInt later
.mapToInt(Integer::parseInt) // transform character in int
.filter(i -> i % 2 == 1) // filter out even numbers
.sum();
pourquoi avez-vous ajouté cette vérification: if (length% 2 == 1) {?
Est-ce que cela répond à votre question? Parcourez chaque chiffre dans un nombre
Vous n'êtes pas trop loin, vous avez trouvé la logique principale. Quelques étapes manquent: à l'intérieur de votre boucle, vous devez obtenir le caractère indexé à
i(par exemple avecString # charAt), puis vous devez le convertir en un nombre ( par exemple avecInteger # valueOf). Seulement alors, vous pouvez faire votre modulo dessus pour savoir s'il est impair ou pair, et l'ajouter à la somme si c'est impair.