Probleme de parité [Résolu]

Messages postés
12
Date d'inscription
mercredi 14 mai 2008
Dernière intervention
15 mai 2008
- 15 mai 2008 à 10:44 - Dernière réponse :
Messages postés
2465
Date d'inscription
samedi 21 février 2004
Dernière intervention
29 janvier 2010
- 15 mai 2008 à 20:44
Bonjour,

J'ai un léger souci (une fois encore)... ^^

J'arrive pas a gérer la parité d'un nombre, donc je voulais savoir si un d'entre vous pouvez m'aiguiller sur une fonction ou une manière de la gérer.

Merci d'avance

Tant que je serais dans le métier, tu ne seras jamais que le second !
Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
Messages postés
140
Date d'inscription
mercredi 30 avril 2003
Dernière intervention
15 mai 2008
- 15 mai 2008 à 11:09
3
Merci
Tu devrais pouvoir faire comme ça :

if( (nombre%2) == 0)
   //nombre paire
else
   //nombre impaire

nombre%2 (nombre modulo 2) retourne le reste de la division de : nombre/2.

S'il y a un reste, c'est que le resultat de la division n'est pas un entier.

a+.
Cbil

Merci cs_cbil 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de cs_cbil
Meilleure réponse
Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Dernière intervention
19 décembre 2016
- 15 mai 2008 à 11:10
3
Merci
tu peux faire :
<hr size="2" width="100%" />
if ( n % 2 == 0 ) {
   System.out.println(n + " est pair.");
else {
   System.out.println(n + " est impair.");

Le % c'est l'opérateur modulo, ça te donne le reste de la division entière.Par exemple : 17 / 3 5 et 17 % 3 2
Avec % 2, le résultat sera 0 si le nombre est multiple de 2, 1 sinon.

Merci cs_jojolemariole 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de cs_jojolemariole
Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Dernière intervention
19 décembre 2016
- 15 mai 2008 à 11:12
0
Merci
lol grillé d'une minute, j'ai oublié de fermer les accolades au dessus, eclipse me donne de mauvaises habitudes.
Commenter la réponse de cs_jojolemariole
Messages postés
12
Date d'inscription
mercredi 14 mai 2008
Dernière intervention
15 mai 2008
- 15 mai 2008 à 11:12
0
Merci
Oui merci je viens de le trouver aussi.
J'avais pas bien chercher, de plus je connaissait pas modulo très bien donc je pouvais pas y arriver ^^

merci pour la réponse ^^

Tant que je serais dans le métier, tu ne seras jamais que le second !
Commenter la réponse de cs_Boowiss
Messages postés
12
Date d'inscription
mercredi 14 mai 2008
Dernière intervention
15 mai 2008
- 15 mai 2008 à 11:13
0
Merci
Pour netBeans c'est la même au niveau des accolade.

Tant que je serais dans le métier, tu ne seras jamais que le second !
Commenter la réponse de cs_Boowiss
Messages postés
2465
Date d'inscription
samedi 21 février 2004
Dernière intervention
29 janvier 2010
- 15 mai 2008 à 14:40
0
Merci
heu en meme temps avec un minimum de recherche tu aurais pu trouve par toi meme

une methode plus optimise consiste a faire un & binaire avec ton nombre et 1 pour tester le dernier bit

si le bit est a 1 ton nombre est impaire sinon pair

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
Commenter la réponse de sheorogath
Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Dernière intervention
19 décembre 2016
- 15 mai 2008 à 14:49
0
Merci
Je confirme, y'a pas photo.

Un petit test pour ceux que ça intéresse :
<hr size="2" width="100%" />
public class Test {

    private static final int max = 100000000;

    public static void main(String[] args) {

        long t1, t2;

        t1 = System.currentTimeMillis();
        methode2();
        t2 = System.currentTimeMillis();
        System.out.println("Methode 2 (&) : " + (t2 - t1) + "ms");

        t1 = System.currentTimeMillis();
        methode1();
        t2 = System.currentTimeMillis();
        System.out.println("Methode 1 (%) : " + (t2 - t1) + "ms");

    }

    public static void methode1() {
        for (int i = 0; i < max; i++) {
            if (i % 2 == 0) {

            } else {

            }
        }
    }

    public static void methode2() {
        for (int i = 0; i < max; i++) {
            if ((i & 1) == 0) {

            } else {

            }
        }
    }

}

Donc merci de l'astuce, ça pourra servir ;)
J'aurais pensé que le compilateur faisais l'amélioration automatiquement.
Commenter la réponse de cs_jojolemariole
Messages postés
2465
Date d'inscription
samedi 21 février 2004
Dernière intervention
29 janvier 2010
- 15 mai 2008 à 14:55
0
Merci
vaut mieu faire toutes les opti possible dans le code

le compilateur doit pas remplacer le bon sens

encore que ca ce n'est pas bien grave

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
Commenter la réponse de sheorogath
Messages postés
12
Date d'inscription
mercredi 14 mai 2008
Dernière intervention
15 mai 2008
- 15 mai 2008 à 15:24
0
Merci
Je ne trouve pas utile (pour mon programme) d'aller analyser un bit précis pour savoir si mon chiffre est impair ça me rajoute des lignes de code pour arriver au même résultat qu'un modulo, peut être pas en temps CPU (mais avec un core 2 duo je suis pas regardant au niveau de la perte de temps pour une action de ce type).

"heu en même temps avec un minimum de recherche tu aurais pu trouve par toi même"

Ce que j'ai fait d'ailleurs je l'ai même dit préalablement mais on m'avais répondue entre temps.

Tant que je serais dans le métier, tu ne seras jamais que le second !
Commenter la réponse de cs_Boowiss
Messages postés
2465
Date d'inscription
samedi 21 février 2004
Dernière intervention
29 janvier 2010
- 15 mai 2008 à 20:44
0
Merci
if (nb & 1 == 0)
paire
else
impaire

ya pas plus de ligne de code et ca va plus vite
et c'est plusieur petite opti qui font qu'un programme est fluide
apres on entends des java c'est lent ... certes plus lent que du C mais faut pas s'etonner

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
Commenter la réponse de sheorogath

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.