IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Algorithme qui calcule la somme des n nombres


Sujet :

avec Java

  1. #1
    Invité
    Invité(e)
    Par défaut Algorithme qui calcule la somme des n nombres
    Bonjour à tous,

    Voulant apprendre le codage avec Java, j'effectue plusieurs exercices "simples" pour m'initier.
    Dans ce programme, j'essaye de calcul la somme des n nombres.
    Cependant, quelque soit le chiffre/nombres indiqué, j'obtiens un résultat égal à 0.

    J'imagine que l'erreur provient de ma boucle "for" mais je n'arrive pas à voir d'où ça vient.

    Pourriez-vous m'aiguiller je vous prie ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    import java.util.Scanner;
     
    public class PremiersNombres 
    {
     
    	public static void main(String[] args) 
    	{
    		int n;
    		int i;
    		int j=0;
     
    		System.out.print("Veuillez indiquer le nombre/chiffre souhaité : ");
    		Scanner clavier = new Scanner (System.in);
    		n = clavier.nextInt();
     
    		for(i=1; i==n; i++)
    		{
    			j+=i;
    		}
     
    		System.out.print("La somme de " + n + " est " + j);
    		clavier.close();
    	}
     
    }
    Cordialement,

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Tu n'as pas besoin de boucle La somme des n premiers nombres est égale à n * (n + 1) / 2.

    Sinon ton problème, c'est ton test : i==n - on boucle tant que la condition est vraie.
    Comme l'égalité est fausse seulement pour n = 1, alors tu auras toujours 0 comme résultat.

    Sinon , tes noms de variables ne sont pas terrible et ta variable j peut être initialisée dans ta boucle.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour/Bonsoir foetus,

    Déjà merci de prendre la peine de me répondre. J'apprécie grandement.
    Pour la petite histoire, je commence à apprendre la programmation via Java depuis deux jours. J'imagine que mon code va en choquer plus d'un

    Citation Envoyé par foetus Voir le message
    Tu n'as pas besoin de boucle La somme des n premiers nombres est égale à n * (n + 1) / 2.
    Effectivement, je suis d'accord avec toi. Le but était plus d'apprendre à utiliser la boucle "for". Mais je suis sûr que tu avais compris la démarche.

    Citation Envoyé par foetus Voir le message
    Sinon ton problème, c'est ton test : i==n - on boucle tant que la condition est vraie.
    Comme l'égalité est fausse seulement pour n = 1, alors tu auras toujours 0 comme résultat.
    Oui, je n'avais pas bien compris qu'on boucle tant que la condition est vraie.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(i=1; i<=n; i++)
    {
    	j+=i;
    }
    Je pense que c'est mieux ainsi ?

    Citation Envoyé par foetus Voir le message
    Sinon , tes noms de variables ne sont pas terrible et ta variable j peut être initialisée dans ta boucle.
    En reprenant mon cas, comment aurais-tu nommé mes variables ?
    Je n'arrive pas à voir comment initialiser la variable j dans la boucle ?

    D'avance merci.
    Cordialement,

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        int sum, nb, n; // <- nb, bof mais cela passe
     
        for(nb=1, sum=0; nb <= n; nb++)
        {
            sum += nb;
        }

  5. #5
    Invité
    Invité(e)
    Par défaut
    Merci pour le coup de main.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    import java.util.Scanner;
     
    public class PremiersNombres 
    {
     
    	public static void main(String[] args) 
    	{
    		int saisieClavier;
    		int nb;
    		int sum;
     
    		System.out.print("Veuillez indiquer le nombre/chiffre souhaité : ");
    		Scanner clavier = new Scanner (System.in);
    		saisieClavier = clavier.nextInt();
     
    		for(nb=1, sum=0; nb<=saisieClavier; nb++)
    		{
    			sum+=nb;
    		}
     
    		System.out.print("La somme de " + saisieClavier + " est " + sum);
    		clavier.close();
    	}
     
    }
    Bizarrement, Eclipse m'indique un warning à la ligne 13 "clavier is never closed". Pourtant j'effectue cette démarche à la ligne 22.
    Sauriez-vous pourquoi ?
    Dernière modification par Invité ; 19/11/2020 à 19h28. Motif: Fusion des messages

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Hello,

    Je ne vais pas installer Eclipse pour vérifier (surtout qu'il faudrait avoir exactement la même version que toi et tu n'as pas indiqué la version),

    mais, on peut envisager que le code que tu montres fasse un warning, mais pas exactement le warning dont tu parles.

    Si un warning est fait, ça devrait être que tu n'es pas 100% sûr de fermer le Scanner correctement. Et non pas qu'il n'est jamais fermé.
    Pour information, quand on veut correctement fermer une ressource après l'avoir ouverte, il faut utiliser un try-with-resource. Ça ressemble à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    try(Scanner clavier = new Scanner(System.in))
    {
        int saisieClavier = clavier.nextInt();
     
        int sum = 0;
        for(int nb=1; nb<=saisieClavier; nb++)
        {
            sum+=nb;
        }
     
        System.out.print("La somme de " + saisieClavier + " est " + sum);
    }
    Cela dit, dans cet exemple très précis, il est assez importun de faire une alarme que le Scanner n'est pas fermé. On doit être responsable de fermer les ressources qu'on ouvre, or le Scanner utilise System.in et ce n'est pas ton code qui l'ouvre. Il ne devrait donc pas non plus prendre la responsabilité de le fermer.

    Ce n'est pas grave de le fermer quand même pour qu'Eclipse se taise avec ses warnings, mais je dirais qu'Eclipse a tort de le demander.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Invité
    Invité(e)
    Par défaut
    Merci pour la précision.
    En reprenant tes remarques, nous arrivons à ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    import java.util.Scanner;
     
    public class PremiersNombres 
    {
     
    	public static void main(String[] args) 
    	{
    		int sum;
    		int saisieClavier;
     
    		System.out.print("Veuillez indiquer le nombre/chiffre souhaité : ");
     
    		try(Scanner clavier = new Scanner (System.in))
    		{
    			saisieClavier = clavier.nextInt();
    			sum = saisieClavier * (saisieClavier + 1) / 2;
    		}
     
    		System.out.print("La somme de " + saisieClavier + " est " + sum);
    	}
    }

  8. #8
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Il n'était pas nécessaire de remplacer la boucle par la formule mathématique ad hoc, mais oui, c'est le principe de fermer les ressources.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Calcul de somme des chiffres de nombre 2^1000
    Par mouradj2006 dans le forum Mathématiques
    Réponses: 12
    Dernier message: 27/02/2012, 11h45
  2. Un script qui calcule la somme des montants d'un formulaire
    Par akaquane dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 17/10/2011, 13h53
  3. template XSL qui calcule la somme des chiffres d'un nombre
    Par thierry_b dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 06/04/2009, 14h55
  4. Réponses: 3
    Dernier message: 01/04/2009, 11h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo