Probleme de parité [Résolu]

cs_Boowiss 12 Messages postés mercredi 14 mai 2008Date d'inscription 15 mai 2008 Dernière intervention - 15 mai 2008 à 10:44 - Dernière réponse : sheorogath 2465 Messages postés samedi 21 février 2004Date d'inscription 29 janvier 2010 Dernière intervention
- 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 

10 réponses

Répondre au sujet
cs_cbil 140 Messages postés mercredi 30 avril 2003Date d'inscription 15 mai 2008 Dernière intervention - 15 mai 2008 à 11:09
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_cbil
cs_jojolemariole 519 Messages postés mercredi 21 mars 2007Date d'inscription 19 décembre 2016 Dernière intervention - 15 mai 2008 à 11:10
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_jojolemariole
cs_jojolemariole 519 Messages postés mercredi 21 mars 2007Date d'inscription 19 décembre 2016 Dernière intervention - 15 mai 2008 à 11:12
0
Utile
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
cs_Boowiss 12 Messages postés mercredi 14 mai 2008Date d'inscription 15 mai 2008 Dernière intervention - 15 mai 2008 à 11:12
0
Utile
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
cs_Boowiss 12 Messages postés mercredi 14 mai 2008Date d'inscription 15 mai 2008 Dernière intervention - 15 mai 2008 à 11:13
0
Utile
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
sheorogath 2465 Messages postés samedi 21 février 2004Date d'inscription 29 janvier 2010 Dernière intervention - 15 mai 2008 à 14:40
0
Utile
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
cs_jojolemariole 519 Messages postés mercredi 21 mars 2007Date d'inscription 19 décembre 2016 Dernière intervention - 15 mai 2008 à 14:49
0
Utile
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
sheorogath 2465 Messages postés samedi 21 février 2004Date d'inscription 29 janvier 2010 Dernière intervention - 15 mai 2008 à 14:55
0
Utile
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
cs_Boowiss 12 Messages postés mercredi 14 mai 2008Date d'inscription 15 mai 2008 Dernière intervention - 15 mai 2008 à 15:24
0
Utile
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
sheorogath 2465 Messages postés samedi 21 février 2004Date d'inscription 29 janvier 2010 Dernière intervention - 15 mai 2008 à 20:44
0
Utile
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.