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

Collection et Stream Java Discussion :

Parcourir un tableau et calculer le nbr de nbr < 5


Sujet :

Collection et Stream Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Parcourir un tableau et calculer le nbr de nbr < 5
    Bonjour. je dois créer une méthode renvoie le nombre de nombres strictement inférieur à 5 que contient le tableau jusqu'à ce que le nombre suivant dans le tableau soit un 3.

    Mon prob, je ne vois pas ou je peux rajouter la 2ème condition ( s'arreter quand y a un 3). est ce que je suis déjà sur une bonne base ou j'aurai du faire autrement?

    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
    /* Pre : tab != null
    	 tab peut être vide
       Post: renvoie le nombre de nombres strictement inférieur à 5 que contient le tableau
    	 tel que le nombre suivant dans le tableau soit un 3
    */
    public static void CalculerLesNombres ( int [] tab , int n, int j){
     
    	int j=0
    	{
    	for (int i=0; i<tab.lenght; n++)
    		{
     
    		if (n < 5); { j = j+1 }
     
     
    		}
    	}
    }
    public static void main (String [] args){
    	ecran.afficher ("Entrer les valeurs du tableau")
    	int [] tab = new int [] tab
            System.out.println("le nombre de nombre inférieur à 5 de "+tab+" est : "+objetjt.CalculerLesNombres(n));
    }

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 333
    Points : 295
    Points
    295
    Par défaut
    Voila le code qui mettra dans la variable compteur le nbre de nbre<5

    Tu devrais nommer tes variables un peu mieux, tu aurrais vu que ton n++ n(avait rien à faire dans ce for

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    	int compteur=0
    	{
    	for (int i=0; i<tab.lenght; i++)
    		{
                   int valeurCourante = tab[i];
     
    		if (valeurCourante  < 5) { 
                    compteur++;  
                     }
     
     
    		}
    	}
    bonne chance
    et bon week end

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    merci pour ta réponse rapide !
    compteur je peux l'appeler comme je veux ? par exemple int j = 0 ?
    et valeur courante = int n ?
    aussi pour qu'il s'arrete à 3 je dois rajouter un if après le premier if nan ?
    par exemple if (valeurcourante ==3) j'arrete tout ? return compteur ?

    désolé je pose beaucoup de question. je suis noob

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    pouvez vous aussi me dire aussi si ma méthode main de test est correct ?

    Aussi pour la boucle for c'est plutot i <tab.lenght -1 ?

  5. #5
    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
    pouvez vous aussi me dire aussi si ma méthode main de test est correct ?
    Non, ça ne compile même pas.
    Un tableau doit être initialisé en indiquant sa taille. Voilà la syntaxe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int taille = 8; // par exemple
    int[] tab = new int[taille];
    Aussi pour la boucle for c'est plutot i <tab.lenght -1 ?
    A priori non... En faisant i < tab.length, ça assure que i est toujours égal ou inférieur à l'index maximum dans le tableau (puisque c'est sa taille moins 1, et qu'on met strictement inférieur à.)

    En faisant i < tab.length - 1 on n'atteint jamais la dernière position du tableau... C'est ce que tu veux ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 328
    Points : 459
    Points
    459
    Par défaut
    Salut,

    Une solution simple:

    -trier le tableau
    -compter le nombre de valeurs inférieures ou égales à 3.

    Comment trier le tableau:

    -En utilisant la classe Arrays (import java.util.Arrays)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    -Arrays.sort(leTableau);

    Comment compter:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      int nombre = 0;
     
             for (int i = 0; i < leTableau.length; i++)
             {
                if (leTableau[i] <= 3)
                   nombre++;
             }
             System.out.println("Nous obtenons " + nombre + " valeurs <5 (le 3 compris).");
    Cordialement,

    Dan

  7. #7
    Invité
    Invité(e)
    Par défaut
    Salut

    @danimo Si tu tries le tableau, tu perds l'ordre initial donc ton compte sera faussé car des nombres < 5 dans le tableau initial se trouvant après le premier 3, pourront se retrouver avant quand tu tries. De plus tu ne comptes pas les 4 dans ton algorithme, or 4 < 5

    @mathlooty Pour la condition, reprends le code de LittleBean et ajoute ton idée avec le return, en testant tu te rendras compte si ça marche ou pas...
    Ton code initial est faux car tu ne lis jamais la valeur courante dans le tableau, il ne compile pas car tu tentes d'afficher une méthode retournant void, il ne compile pas car tu ne passes qu'une variable n à ta méthode que tu déclares prenant trois paramètres.
    Je pense qu'il faut te pencher un peu sur tes cours de programmation en général, et sur tes cours de java en particulier, tu as plusieurs erreurs de syntaxe et de logique. Bon courage

    A plus

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 328
    Points : 459
    Points
    459
    Par défaut
    Salut,

    George7:
    Si on se base sur le titre "Parcourir un tableau et calculer le nbr de nbr < 5" tout à fait d'accord; mais si on prend l'énoncé du problème:

    "Bonjour. je dois créer une méthode renvoie le nombre de nombres strictement inférieur à 5 que contient le tableau jusqu'à ce que le nombre suivant dans le tableau soit un 3 ."
    et laquestion de mathlooty:

    "Mon prob, je ne vois pas ou je peux rajouter la 2ème condition " ( s'arreter quand y a un 3). est ce que je suis déjà sur une bonne base ou j'aurai du faire autrement?" je pense qu'il n'y a pas d'équivoque.

    Et rien ne nous empêche de poursuive la recherche en modifiant la boucle de calcul:
    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
    int nombre = 0;
             for (int i = 0; i < tabValNum.length; i++)
             {
                if (tabValNum[i] <= 3)
                   nombre++;
                else
                {
                   System.out.println("Nous obtenons " + nombre + " valeurs <5 (l'eventuel 3 compris).");
                   nombre = 0;
                   for (i = i; i < tabValNum.length; i++)
                   {
                      if (tabValNum[i] <5)
                         nombre++;
                   }
                }
             }
    if (nombre > 0)
             System.out.println("\nNoter que nous avons encore " + nombre + " valeur(s) <5.");
    Remarque:

    -envisager l'utilisation de REGEX si c'est autorisé...

    Cordialement,

    Dan

  9. #9
    Invité
    Invité(e)
    Par défaut
    Salut,

    danimo : je ne comprends pas comment ton algo marche... De ce que j'ai compris de son problème (car je n'ai pas lu que l'énoncé), si tu as ce tableau :
    [1, 4, 4, 6, 2, 3, 4, 1, 7, 8], le résultat sera : 4 (1, 4, 4, et 2)
    Or ton algo sans tri retournera :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Nous obtenons 1 valeurs <5 (l'eventuel 3 compris).
     
    Noter que nous avons encore 6 valeur(s) <5.
    et ton algo avec tri : 4 (1, 1, 2 et 3)
    Donc je ne vois pas en quoi ma remarque ci dessus est fausse, malgré ton explication...
    Je verrais un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int nb = 0;
    for(int i = 0 ; i < tab.length ; i++) {
        if(tab[i] == 3) {
            return nb;
        } else if (tab[i] < 5) {
            nb++;
        }
    }
    Bon après peut-être que je ne sais pas lire l'énoncé mais je le co,prends comme ça (bien sûr on peut adapter le return en break si on le souhaite, tout dépend de comment cet algo doit s'intégrer dans le reste)

    A plus

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par George7 Voir le message
    Je pense qu'il faut te pencher un peu sur tes cours de programmation en général, et sur tes cours de java en particulier, tu as plusieurs erreurs de syntaxe et de logique. Bon courage

    A plus
    Oui je m'en rends compte. J'ai eu 2.75/10 à cet exercice ..
    Je ne comprends même pas tout à fait vos réponses dès fois.

    Mes bases ne sont pas du tout correct en fait, j'ai de grosses lacunes.
    Mais voilà, je trouve que mon cour est pas très clair, je n'arrive pas à refaire et faire des exercices seul..

  11. #11
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 328
    Points : 459
    Points
    459
    Par défaut
    Salut,
    @George7:

    Avec ton exemple de tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int[] tabValNum = {1, 4, 4, 6, 2, 3, 4, 1, 7, 8}; // avec un seul 3
    qu'il faut trier, c'est mon astuce et avec tri je retourne bien 4 >> (1, 1, 2 et 3)
    plus:
    Noter que nous avons encore 3 valeur(s) <5. >> (4, 4, 4)

    Mais je dois admette qu'avec plusieurs 3 c'est pas bon!!!

    Alors j'ai modifié:

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    import java.util.Arrays;
     
        public class Reponses
       {
           public static void main(String args[])
          {
     
     
          // NOMBRE DE VALEURS <5 D'UN TABLEAU
          // AVEC ARRET QUAND ON TROUVE LA VALEUR 3
     
          // Supposons que nous saisissons une serie de nombre et que nous les avons
          // enregistrées dans le tableau tabValNum
     
          // simulation:
             //int[] tabValNum = {14, 2, 11, 8, 4, 150, 6, 150, 1, 2, 4, 3, 5, 7, 2, 1, 3, 18};
             //int[] tabValNum = {14, 2, 11, 8, 4, 150, 6, 150, 1, 2, 4, 5, 7, 2, 1, 18};
             //int[] tabValNum = {14, 2, 11, 8, 150, 6, 150, 1, 2, 5, 7, 2, 1, 18};
     
             //int[] tabValNum = {1, 4, 4, 6, 2, 3, 4, 1, 7, 8}; // avec un seul 3
             int[] tabValNum = {1, 4, 4, 6, 2, 3, 4, 1, 7, 8, 3};  // avec un second 3
     
                   // tri du tableau:
             Arrays.sort(tabValNum);
     
          	// DEPUIS LA VERSION JAVA SE 5
             System.out.println("\nAffichage du tableau:\n"); // pour controle
             for (int n : tabValNum) System.out.println(n + "\n");
     
             int nombre = 0;
             for (int i = 0; i < tabValNum.length; i++)
             {
                if (tabValNum[i] <= 3)
                {
                   nombre++;
                }
                if (tabValNum[i] == 3)
                {
                   System.out.println("Nous obtenons " + nombre + " valeurs <5 (l'eventuel premier 3 compris).");
                   nombre = 0;
                   for (i = (i +1); i < tabValNum.length; i++)
                   {
                      if (tabValNum[i] <5)
                         nombre++;
                   }
                }
             }
             if (nombre > 0)
                System.out.println("\nNoter que nous avons encore " + nombre + " valeur(s) <5.");
          }
       }
    qui fonctionne aussi avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int[] tabValNum = {1, 4, 4, 6, 2, 3, 4, 1, 7, 8, 3};  // avec un second 3
    je retourne 4 >> (1, 1, 2 et 3)
    et:
    Noter que nous avons encore 4 valeur(s) <5. >> (3, 4, 4, 4)


    Cordialement,

    Dan

  12. #12
    Invité
    Invité(e)
    Par défaut
    Salut,

    @mathlooty : si tu débutes ça viendra encore, mais il faut bien revoir et analyser les corrigés de tes exos

    @danimo : je ne comprends toujours pas et avec ce tableau { 1, 4, 4, 6, 2, 3, 4, 1, 7, 8, 1, 3 } ton algo ne marche toujours pas, avec celui ci non plus : { 1, 4, 4, 4, 6, 2, 3, 4, 1, 7, 8, 3 }
    Bref j'ai l'impression que ton algo marche dans des cas très particuliers quand le nombre d'inférieurs à 3 plus le premier trois dans tout le tableau est le même que les nombre d'inférieurs à 5 avant le premier 3 trouvé

  13. #13
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 328
    Points : 459
    Points
    459
    Par défaut
    Re,

    Bon, j'ai encore testé avec les cas que tu signales et j'affirme que c'est OK.

    Il suffit d'enregistrer mon code, qui est un programme complet, de le compiler et de l'exécuter pour le constater.

    Dan

  14. #14
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par danimo Voir le message
    Re,

    Bon, j'ai encore testé avec les cas que tu signales et j'affirme que c'est OK.

    Il suffit d'enregistrer mon code, qui est un programme complet, de le compiler et de l'exécuter pour le constater.

    Dan
    Ce que j'ai fait... Je ne lance pas d'affirmations en l'air.

    Avec le tableau { 1, 4, 4, 4, 6, 2, 3, 4, 1, 7, 8, 3 } et ton algo j'obtiens ceci :
    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
    26
    27
    28
    29
    30
     
    Affichage du tableau:
     
    1
     
    1
     
    2
     
    3
     
    3
     
    4
     
    4
     
    4
     
    4
     
    6
     
    7
     
    8
     
    Nous obtenons 4 valeurs <5 (l'eventuel premier 3 compris).
     
    Noter que nous avons encore 5 valeur(s) <5.
    Or si je compte le nombre d'entiers <5 avant le premier 3 trouvé (ce que j'ai compris en lisant la question initiale et non pas seulement le titre comme on pourrait le croire), on constate que l'on a : 1, 4, 4, 4, et 2 soit 5 et non pas 4

    Enfin bon je sens que la discussion est stérile, donc tant pis...

  15. #15
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 328
    Points : 459
    Points
    459
    Par défaut
    @George7:

    Oui,

    Moi je m'entête à vouloir que le tableau soit trié et toi à vouloir travailler avec le tableau brut de saisie...

    J'aimerais savoir si notre ami mathlooty à eu un corrigé en cours, il serait intérressant de savoir ce qu'attendait le prof.

    Cordialement,

    Dan

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par danimo Voir le message
    @George7:

    Oui,

    Moi je m'entête à vouloir que le tableau soit trié et toi à vouloir travailler avec le tableau brut de saisie...

    J'aimerais savoir si notre ami mathlooty à eu un corrigé en cours, il serait intérressant de savoir ce qu'attendait le prof.

    Cordialement,

    Dan

    Non désolé. On n'a jamais de corrigé .. c'est dommage!!

  17. #17
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 245
    Points : 347
    Points
    347
    Par défaut
    je suis d'accord avec Georges7 ton algo ne fonctionne pas en général mais juste sur des cas particulier.

    On prend la liste suivante {4,2,2,4,4,4,4,3,2,4}

    Résultat :

    Affichage du tableau:

    1

    2

    2

    2

    3

    4

    4

    4

    4

    4

    4

    Nous obtenons 5 valeurs <5 (l'eventuel premier 3 compris).

    Noter que nous avons encore 6 valeur(s) <5.
    GÉNÉRATION TERMINÉE (durée totale* 0 secondes)
    faux car il y a 7 (ou 8 si on prend le 3) valeurs <5 avant le premier 3 donc je viens de démontrer par un seul exemple qu'il est complètement foireux.

    Le fait de trier ta liste empeche la condition d'arret de se lancer au bon moment et introduit donc un mauvais traitement de celle-ci. L'ordre d'apparition des nombres un plus qu'important dans cet algo...

Discussions similaires

  1. Tableau et calculs
    Par isak dans le forum Composants
    Réponses: 1
    Dernier message: 30/06/2005, 10h33
  2. Meilleure Méthode pour parcourir un tableau
    Par KPitN dans le forum MFC
    Réponses: 7
    Dernier message: 24/02/2005, 16h19
  3. Comment parcourir un tableau
    Par petitsims dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 27/01/2005, 14h33
  4. parcourir un tableau aléatoirement
    Par khayyam90 dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 01/12/2004, 13h44
  5. [langage] Parcourir un tableau
    Par Jibees dans le forum Langage
    Réponses: 13
    Dernier message: 22/04/2003, 14h18

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