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

avec Java Discussion :

Notion de cast


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Par défaut Notion de cast
    Bonjour,

    Je suis débutant en JAVA, et on nous à demander de tester des bouts de codes chez nous.

    Le code à tester est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    public class test
    {
     
       public static void main(String[] args)
       {
      char c = 'a';
      c = c +  'a';
      System.out.print(c);
      }
     }
    Mais ca ne compile pas l'erreur est la suivante :

    test.java:7: possible loss of precision
    found : int
    required: char
    c = c + 'a';
    ^
    1 error

    Alors j'ai fait d'autres tests et j'ai trouvé deux autres codes qui marchent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    public class test
    {
     
       public static void main(String[] args)
       {
      char c = 'a';
      c += 'a';
      System.out.print(c);
      }
     }
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    public class test
    {
     
       public static void main(String[] args)
       {
      char c = 'a';
      c = (char) (c +'a');
      System.out.print(c);
      }
     }
    Et finalement ma question c'est que je ne comprends pas l'erreur du premier code. Pourquoi est-ce qu'il me dit que il trouve un integer alors que j'ai déclaré la variable "c" en char 1 ligne plus haut ? Et que la lettre a est entre simple quotte ce qui doit faire d'elle un type "char".

    Merci de vos futurs réponses,

    Bye bye

  2. #2
    Membre chevronné
    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
    Par défaut
    Salut, (Re)

    La conversion (implicite), entre char et int, n'est possible que de char vers int, soit int = char

    exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    char c = 'a';  // 'a' n'est pas un type char mais la valeur décimale de la lettre a, c'est identique à c = 97;
    int i = 0;
     
    //c = i; // est refusé par javac (possible loss of precision)
    // par contre:
    i = c; // est ok (char vers int)
    que fait-on quand on écri c = c + 'a':
    c'est équivalent à c = c + 97, on veut donc ajouter 97 (int) à c, et donc c'est refusé (int vers char).

    Quand on fait c+= 'a', c'est faire c = 'a' + 'a', soit c = 97 + 97 donc c = 194, ce qui est correct.
    Penser que la table ASCII s'arrête à 255

    Voir ce lien:

    http://www.table-ascii.com/

    Cordialement,

    Dan

  3. #3
    Membre Expert Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Par défaut
    Je viens de comprendre grâce à ton explication

    Merci beaucoup

    tchao

  4. #4
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Bonjour.

    La conversion implicite de int vers char est impossible mais il reste possible de convertir un int en char en faisant un cast (conversion de type) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int nb = 97;
    char lettre = (char) nb; /* Le carractère sera 'a' */
    Ou si tu veut récupérer un nombre en tant que caractère :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int nb = 1;
    /* on passe par une conversion en String */
    String str = Integer.toString (nb);
    char c = str.charAt (0); /* Le caractère sera 1 */

  5. #5
    Membre Expert Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Par défaut
    Interessant merci de m'avoir répondu aussi.

    J'ai mit [résolu] mais si vous passez par là, j'ai encore quelques petites questions :
    En fait, 'a' ou encore 97 est considéré par défaut comme un int même si 'a' est entre quotte, c'est bien ça ?
    -------------------------------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    c = c + (char)('a');
    Pourquoi est-ce qu'il ne suffit pas de déclarer 'a' comme un char vu que c est déjà déclaré.

    ---------------------------------------
    Et finalement :
    Pourquoi est-ce qu'il ne me met pas d'erreur à la compilation, 2 n'est-il pas considéré comme un int ??

    Voila merci à vous si vous prenez le temps de me répondre =)

  6. #6
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Je pense que 97 en tant qu'expression est int, 'a' en tant qu'expression est char.

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

Discussions similaires

  1. Probleme CAST
    Par cedric31 dans le forum SQL
    Réponses: 2
    Dernier message: 16/02/2004, 10h46
  2. CAST ou autre ?
    Par 74160 dans le forum Requêtes
    Réponses: 2
    Dernier message: 10/07/2003, 15h00
  3. CAST DATETIME ----> SMALLDATETIME
    Par Guizz dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 26/06/2003, 12h07
  4. traduction en delphi "reinterpreted cast"
    Par Chupakabra dans le forum Langage
    Réponses: 3
    Dernier message: 13/02/2003, 15h49
  5. Notion d'algorithme
    Par gtr dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 10/12/2002, 11h46

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