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

Langage Java Discussion :

[Debutant] Questions sur l'assignation (++,etc)


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut [Debutant] Questions sur l'assignation (++,etc)
    Bonjour tout le monde,

    Je prépare un cours JAVA que je commencerai à partir de septembre 2006.

    J’essaie de faire les exercices concernant les opérateurs arithmétiques et assignation.

    Ce n’est pas très compliqué mais il y’a quand même certaines choses que je ne comprends pas.

    Chose importante à savoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int i, j, k ;
    byte by ;
    double d;
    float f;
    k=10;
    j=6;
    f=3.9f;
    d=6.2f
    J’ai certains exercices du genre :

    1+2*3

    Et je le résous en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(1+2*3) ;
    J’obtiens après compilation et exécution 7.

    Par contre pour d’autres énoncés dans le même exercice, je ne comprends pas comment il trouve les réponses.

    Voici ceux-là :

    3) : il arrive à 1 ! comment fait-il pour arriver à 1 ?
    Si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(38020) ;
    j’obtiens 38020 et pas 1.

    7) 5%3 : 2

    Comme j’ai pu comprendre, % (modulo) donne 1 si une division donne un reste exemple 7 /2 et 0 si il n’y a pas de reste exemple 4/2.

    Par contre je ne sais pas d’où vient ce 2, je ne comprends pas comment on obtiens 2.

    12) 20%3*2/2 (idem que l’exercice numéro 7).
    14) k++ : j’obtiens 11 si je fais :

    k++ ;
    System.out.println(k) ;
    11

    Par contre si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    System.out.println(k++)
    J’obtiens 10

    Par contre System.out.println("K++ " + k++); donne 10 dans la console DOS mais k = 11 !!! car quand je fais l’exercice d’après qui est :

    System.out.println(++k) ; j’obtiens 12 alors que le Professeur indique comme réponse 11 !

    Si je met en commentaire System.out.println("K++ " + k++); l’exercice ci-dessus me donne 11.

    Vous pourriez m’expliquez svp ?

    42) k=(k>j) ?:j+1 = 10

    ci-dessus, je ne comprends pas du tout. Je ne sais pas à quoi sert ce ? et le :…

    k++ + ++k donne 22, je pensais que k++ donnait 10 et pas 11 ???

    (k%2= = 0) ?-1 :1 : ici je ne comprends pas du tout.

    b ^ true : pourriez-vous me dire à quoi correspond ce ^ ???

    Voilà, merci d’avance pour votre aide.

    bgs

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par beegees
    3) : il arrive à 1 ! comment fait-il pour arriver à 1 ?
    Si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(38020) ;
    j’obtiens 38020 et pas 1.
    Je ne comprend pas vraiment ce "code" ??? Et comment tu pourrais arriver à 1 !!!


    Citation Envoyé par beegees
    7) 5%3 : 2

    Comme j’ai pu comprendre, % (modulo) donne 1 si une division donne un reste exemple 7 /2 et 0 si il n’y a pas de reste exemple 4/2.

    Par contre je ne sais pas d’où vient ce 2, je ne comprends pas comment on obtiens 2.
    L'opérateur % (modulo) ne renvoit pas 0 ou 1, mais le reste de la division entière dans tous les cas !

    7/2 == 3
    reste == 1 (car 3*2+1 == 1)

    5/3 == 1
    reste == 2 (car 1*3+2 == 5)


    Citation Envoyé par beegees
    12) 20%3*2/2 (idem que l’exercice numéro 7).
    Il me semble que ces opérateurs ont les mêmes priorité, donc le calcul se fait de gauche à droite :
    20%3 == 2 (car 20/3 == 6 et 6*3 == 18)
    Donc on a 2*2/2 2


    Citation Envoyé par beegees
    14) k++ : j’obtiens 11 si je fais :

    k++ ;
    System.out.println(k) ;
    11

    Par contre si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    System.out.println(k++)
    J’obtiens 10
    C'est normal : l'opérateur x++ a la priorité la plus faible, et est même exécuté après que les paramètres ne soit passé à la méthode.
    Dans le premier cas comme tu utilises k++ dans l'instruction précédente tu as bien 11 lorsque tu rentres dans le println().

    Par contre dans le second cas, la vairable k n'est mise à jours qu'après l'appel de la méthode.
    Ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(k++);
    est l'équivalent de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    System.out.println(k);
    k = k + 1;

    Citation Envoyé par beegees
    Par contre System.out.println("K++ " + k++); donne 10 dans la console DOS mais k = 11 !!! car quand je fais l’exercice d’après qui est :

    System.out.println(++k) ; j’obtiens 12 alors que le Professeur indique comme réponse 11 !

    Si je met en commentaire System.out.println("K++ " + k++); l’exercice ci-dessus me donne 11.

    Vous pourriez m’expliquez svp ?
    L'opérateur ++x est au contraire le plus prioritaire. Il sera exécuté en premier.
    Donc System.out.println(++k); augmentera la valeur de k de 1 AVANT d'appeller la méthode println(), alors que System.out.println(k); ne modifiera la valeur de k qu'APRES l'appel de la méthode...

    Maintenant si tu rajoutes/supprimes des instructions tu vas forcément modifier le résultat final...


    Citation Envoyé par beegees
    42) k=(k>j) ?:j+1 = 10

    ci-dessus, je ne comprends pas du tout. Je ne sais pas à quoi sert ce ? et le :…
    L'instruction est incomplète : il manque une valeur entre le ? et le :
    Il s'agit d'une structure conditionnel qui détermine une valeur selon une condition :
    condition ? valeur_si_vrai : valeur_si_faux
    Citation Envoyé par beegees
    k++ + ++k donne 22, je pensais que k++ donnait 10 et pas 11 ???
    Déjà k++ ne donne pas 10 ou 11 : il rajoute 1 à la valeur de k...

    Ensuite il faut respecter les priorités, cela revient à écrire ceci : :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // k = 10
    k = k + 1;   // ++k est exécuté AVANT, donc k == 11
    System.out.println( k + k );   // 11 + 11 == 22
    k = k + 1;   // k++ est exécuté APRES, donc k = 12
    Citation Envoyé par beegees
    (k%2= = 0) ?-1 :1 : ici je ne comprends pas du tout.
    Si k%2 est égal à zéro, alors la valeur retourné est -1, sinon 1 (voir plus haut)...

    Citation Envoyé par beegees
    b ^ true : pourriez-vous me dire à quoi correspond ce ^ ???
    Il s'agit d'un OU EXCLUSIF, qui renvoit vrai seulement si les deux valeurs booléennes sont différentes...

    Tu peux également le retrouver avec des valeurs numérique, et cela effectuera alors un calcul sur les bits représentant le nombres...




    Mais tu pourrais trouver ce type de détail dans n'importe quel cours pour Java (et pour la plupart des langages qui utilisent la même syntaxe).

    a++

  3. #3
    Membre chevronné
    Avatar de Glob
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Avril 2002
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Avril 2002
    Messages : 428
    Par défaut
    ... impossible de passer derrière adiGuba pour en rajouter...

  4. #4
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut
    Bonjour adiGuba,

    Je tiens à te remercier sincèrement pour ta réponse et pour le temps que tu y a consacré !

    Je n'ai lu que certains passages (car je suis au boulot) mais ce que j'ai pu lire jusque maintenant répond déjà à pas mal de mes questions.

    Je vais imprimer ta réponse et lire cela à mon aise ce soir.

    Merci encore.

    bgs

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

Discussions similaires

  1. [Debutant] Question sur Cours SQL Pro
    Par etiennegaloup dans le forum Langage SQL
    Réponses: 5
    Dernier message: 25/10/2005, 09h50
  2. [debutant] question sur JCreator ? (son classpath)
    Par easyman dans le forum Environnement de Développement Intégré (EDI)
    Réponses: 3
    Dernier message: 25/10/2005, 08h56
  3. [Debutant] Question sur la redéfinition de getPreferredSize
    Par etiennegaloup dans le forum Débuter
    Réponses: 1
    Dernier message: 23/09/2005, 20h02
  4. [Debutant] Question sur le system.out.print
    Par thom02 dans le forum Langage
    Réponses: 8
    Dernier message: 19/07/2005, 18h19
  5. [debutant] Questions sur 1 futur projet
    Par cyrull22 dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 28/04/2003, 21h49

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