Java, Exercice à tableaux... Coincé.

Bonjour a tous m'sieurs dames!

Je viens vous embêter aujourd'hui, c'est parce que je n'arrive pas écrire un code correcte en java pour cet exercice:

Ecrivez un programme qui demande à l'utilisateur de saisir une série de nombres entiers positifs ou négatifs. La saisie s'arrête lorsque l'utilisateur tape la valeur 0 (zéro). Lorsque la saisie est terminée, le programme affiche le nombre de valeurs paires et le nombre de valeurs impaires saisies. Pour savoir si une valeur est paire, il suffit de regarder si le reste de la division de la valeur considérée par 2 est égal à zéro.

La prof n'a pas donné de consignes, je pense qu'il faut utiliser des tableaux, mais je n'y arrive pas...

En espérant que quelqu'un aura la gentillesse de m'aider sur cet exercice tout bidon : ( J'suis en première, désolé de vous déranger avec des broutilles...

Merci d'avance!

12 réponses

  • Votes
  • Date
  • Date décroissante
Résumé de la discussion

Un programme Java doit lire une série de nombres entiers, positifs ou négatifs, jusqu'à zéro, puis afficher le nombre de valeurs paires et impaires rencontrées lors de l'entrée. Plusieurs approches ont été discutées: l'utilisation éventuelle d'un tableau pour stocker les valeurs et, surtout, l'option plus simple avec deux compteurs nbPair et nbImpair complétés selon la parité. D'autres proposent de ne pas utiliser de tableau et d'incrémenter directement les compteurs via des tests n % 2 == 0, en veillant à itérer tant que la saisie n'est pas égale à zéro. La discussion évoque aussi des détails pratiques comme l'ordre des opérations et les corrections d'extraits de code, sans aboutir à une conclusion unique sur la meilleure méthode.

Bobot (l’IA à votre service)
  1. voilà ce dont tu auras besoin:
    - tes cours d'algorithmie
    - un tableau d'entier (int[])
    - l'opérateur modulo (a chercher sur google)
    - un if suivi de son else pour la vérif du nombre pair ou impair
    - une boucle while pour récupérer le nombre saisi par l'utilisateur

    qu'est ce que tu as fait jusqu'à présent ?
    1. Modérateur
      tu peux éventuellement nous montrer le code que tu as essayé d'écrire
      1. J'utilise une machine virtuelle sur mac, alors sortir mon code de netbeans, je n'ai aucune idée de comment.
        Je vais vous le retaper ici, sommairement :)

        //variables
        Scanner scan = newscanner(System.in);
        int nbr, cptpaire, cptimpaire

        cptpaire=0
        cptimpaire=0

        System.out.println("Entrez valeur")
        nbr= scan.nextInt();

        While (nbr !=0)
        System.out.println("Entrez valeur")
        nbr= scan.nextInt();

        if (nbr < 0)
        Cptimpaire = cptimpaire+1

        else (nbr > 0)
        Cptpaire = Cptpaire + 1

        Je me doute bien qu'a partir du if, plus rien n'est vraiment bon... Comment fait-on pour déclarer un tableau ?
        Et comment je l'utilise ? J'viens de comprendre pourquoi on en a besoin d'un...
        1. Modérateur
          pour un tableau, rien de plus simple

          int[] tableau = new int[];

          fais attention avec java, il est case sensitive !!!!

          Cptimpaire = cptimpaire+1 va provoquer une erreur
          1. Ok, ok, donc ca donne:

            //variables
            Scanner scan = newscanner(System.in);
            int nbr, cptpaire, cptimpaire
            int[] tableau = new int[];

            cptpaire=0
            cptimpaire=0

            System.out.println("Entrez valeur")
            nbr= scan.nextInt();

            While (nbr !=0)
            System.out.println("Entrez valeur")
            nbr= scan.nextInt();

            if (nbr < 0)
            cptimpaire = cptimpaire+1

            else (nbr > 0)
            cptpaire = Cptpaire + 1

            Et après je l'utilise comment le tableau ? Et le modulo ?
            Ou est-ce que je les mets ?
            1. déjà écrit sur papier le programme avec des mots simple (ça s'appel l'algorithmie)

              une variable c'est une sorte de tiroir dans la mémoire de ton ordinateur
              un tableau c'est une sorte de tiroir a l'intérieur du tiroir dans la mémoire.
              pour déclarer un tableau tu devrais avoir un exemple dans ton cours

              ah et j'ai oublié de dire qu'il fallais aussi 2 variable, une pour le nombre de chiffre pair et une pour le nombre de chiffre impair
              une variable pour le nombre de l'utilisateur peut être utilisé, mais c'est optionnel

              le if n'est pas une boucle, mais une condition :)
              le plus pratique comme boucle serais d'utiliser do{}while(test);
              comme ça tu feras le test de la boucle à la fin
              donc la boucle serviras au stockage des valeurs dans le tableau et à l'incrémentation de la variable pair ou impair suivant la valeur saisie par l'utilisateur.
              l'affichage du résultat ne se fera qu'a la fin
              1. Modérateur
                Il n'y a pas besoin d'utiliser de tableau dans ce programme, il suffit de prendre deux compteurs (nbPair et nbImpair par exemple) et d'incrémenter l'un ou l'autre selon la parité de l'entier saisi, et d'afficher leurs valeurs à la fin.
                1. le tableau c'est juste pour stocker les valeurs, même si c'est pas vraiment utile dans ce programme, c'est toujours bien de savoir comment ça s'utilise ^^
                2. Modérateur
                  Ici on ne connait pas à l'avance la taille du tableau, donc utiliser un tableau serait plus compliqué qu'autre chose, l'idéal serait une liste en fait, mais son prof abordera toutes ses notions en temps utile, pour l'instant il peut faire sans alors faisons simple ^^
              2. Modérateur
                personnellement, en voyant le code, je ne pense pas qu'un tableau soit utile ici. Il te suffit de tester directement l'entier et d'incrémenter tes compteurs pai/impair.

                if(nbr%2 == 0)

                cptpaire = cptpaire+1;

                pour le else, le test n'est pas utile. c'est logique.

                else cptimpaire = cptimpaire+1;
                Chouba, Modérateur CCM
                Bibapeloula
                1. //variables
                  Scanner scan = newscanner(System.in);
                  int nbr, cptpaire, cptimpaire

                  cptpaire=0
                  cptimpaire=0

                  System.out.println("Entrez valeur")
                  nbr= scan.nextInt();

                  While (nbr !=0)
                  System.out.println("Entrez valeur")
                  nbr= scan.nextInt();

                  if (nbr%2 ==0)
                  cptpaire = cptpaire++

                  else
                  cptimpaire = Cptimpaire ++;

                  Quelque chose comme ça ?

                  Et après je finalise avec

                  System.out.println("Il y a " + cptpaire + " nombres paires et " + cptimpaire + " nombres impairs! " )

                  Je vous suit bien ? Merci de votre aide en tout cas :)
                  1. Modérateur
                    Comme l'a dit Choubaka, le Java est sensible à la casse, tu dois donc mettre les majuscules au bon endroit. Il n'y en a pas à while, mais il y en a à Scanner (qui doit être détaché du new par un espace)
                    Ensuite pour que ta boucle while porte sur plusieurs instructions, il te faut des accolades !
                    Enfin, pour l'incrémentation soit tu fais x=x+1, soit tu fais x++, mais un mélange des deux x=x++ c'est maladroit.
                  2. //variables
                    Scanner scan = new Scanner(System.in);
                    int nbr, cptpaire, cptimpaire ;

                    cptpaire=0 ;
                    cptimpaire=0 ;

                    System.out.println("Entrez valeur")
                    nbr= scan.nextInt();

                    while (nbr !=0)
                    System.out.println("Entrez valeur") ;
                    nbr= scan.nextInt();

                    if (nbr%2 ==0)
                    cptpaire++

                    else
                    Cptimpaire ++;

                    System.out.println("Il y a " + cptpaire + " nombres paires et " + cptimpaire + " nombres impairs! " )

                    Les accolades je les ajouterais sur netbeans ;)

                    Le code est correcte alors ? Le modulo est bien placé ?
                  3. Modérateur
                    Le code ne sera pas correct sans les accolades placées au bon endroit !
                    De plus ton premier "Entrez valeur" ne sera pas comptabiliser !
                    Une boucle do while serait peut-être plus intéressante ici...
                  4. Modérateur
                    Scanner scan = new Scanner(System.in);
                    int nbr, cptpaire, cptimpaire ;

                    cptpaire = 0 ;
                    cptimpaire = 0 ;

                    System.out.println("Entrez valeur")
                    nbr = scan.nextInt();

                    while (nbr != 0) {
                    System.out.println("Entrez valeur") ;
                    nbr = scan.nextInt();

                    if (nbr%2 == 0)
                    cptpaire++;

                    else
                    Cptimpaire ++;

                    }
                    System.out.println("Il y a " + cptpaire + " nombres paires et " + cptimpaire + " nombres impairs! " );

                    on approche .. on approche ;-)
                  5. Tu peux m'aider pour la boucle do while ? Parce que je ne vois pas comment l'écrire.

                    Et les accolades, je les ajouterais sur netbeans : Je suis sur mac, j'ai pas ca sur mon clavier -__- 'fin si sûrement, mais j'vais pas chercher après alors que sur NetB il va me les mettre direct.
                2. Dois-tu le faire en orienté objet?
                  1. @ loi219, Je ne saisis pas ce que veut dire orienté objet, donc considères que non étant donné que je suis en première et que je débute java :-D

                    à Vordano, aucun soucis pour les cours d'algo, j'ai bien saisis les concept tant que, pour, si, etc...

                    Les tableaux je n'ai pas appris pour le moment, a mon avis, l'exercice sert à nous tester sur cela: certains en classe ont un meilleur niveau, donc les exos sont variés.

                    Le modulo, je recherche sur google, ok ^^

                    J'ai tenté avec la boucle if else, mais le programme m'annonce des bugs, que je corrige, et après, en exécutant le prog, j'parviens pas à avoir ce que je veut...

                    Avec la boucle while, j'initialise un compteur ?
                  2. non je ne dois pas le faire en orienté objet, je sais même pas ce que c'est ^^
                  3. non pour la troisième fois :-)