[LGJ]Ce Code contient uen erreur... OU??

Page 1 sur 3 1, 2, 3  Suivant

Voir le sujet précédent Voir le sujet suivant Aller en bas

[LGJ]Ce Code contient uen erreur... OU??

Message  Benjy le Mer 04 Juin 2008, 20:18

◮ Quel est le problème avec le code suivant ?
Code:
public class Test {
  public static void main (String [] args) {
      f (1,2);
  }
  public static void f (short a, short b) {
      System.out.println(a+b);
  }
}


on est plusieurs à pencher sur le fait que les paramètres soit des short, et on est plus sur du fait qu'on puisse effectuer des opérations arithmétique sur des short... mais sinon, on voit pas bounce bounce

Benjy

Nombre de messages : 382
Prénom : Benjamin
Statut : étudiant
Localisation : Ath - Hainaut
Date d'inscription : 06/10/2007

Revenir en haut Aller en bas

Re: [LGJ]Ce Code contient uen erreur... OU??

Message  Invité le Mer 04 Juin 2008, 20:41

le 1 est un int, le 2 est un int...

donc, deux ints peuvent aller dans 2 longs mais pas dans deux shorts...

le code suivant est correct:

Code:
public class Test {
  public static void main (String [] args) {
      f ((short)1,(short)2);
  }
  public static void f (short a, short b) {
      System.out.println(a+b);
  }
}

Invité
Invité


Revenir en haut Aller en bas

Re: [LGJ]Ce Code contient uen erreur... OU??

Message  Benjy le Mer 04 Juin 2008, 20:44

ha par défaut un littéral numérique est un int? ou plutot lors de l'appel de la fonction, le compilateur prend 1 et 2 comme int vu que c le mieux (dirons nous...) et après ça foire c'est ça? faut préciser quoi

Benjy

Nombre de messages : 382
Prénom : Benjamin
Statut : étudiant
Localisation : Ath - Hainaut
Date d'inscription : 06/10/2007

Revenir en haut Aller en bas

Re: [LGJ]Ce Code contient uen erreur... OU??

Message  Zahra le Mer 04 Juin 2008, 20:51

Comme benjy, je ne vois pas bien pourquoi sa plante... j'imagine aussi que par défaut c'est considérer comme un int, mais sans certitude Arrow

Zahra

Nombre de messages : 250
Age : 29
Prénom : Zahra
Statut : Etudiante 2e Gestion
Localisation : Wauthier-Braine
Date d'inscription : 18/05/2007

Revenir en haut Aller en bas

Re: [LGJ]Ce Code contient uen erreur... OU??

Message  Gustavo le Mer 04 Juin 2008, 20:53

Benjy a écrit:ha par défaut un littéral numérique est un int? ou plutot lors de l'appel de la fonction, le compilateur prend 1 et 2 comme int vu que c le mieux (dirons nous...) et après ça foire c'est ça? faut préciser quoi

ben c'est simplement que la méthode est appellée en lui donnant deux int en paramètre alors qu'il faut lui donner des short (ou à la limite des byte)

edit: ou plutot: "f(1,2)" correspond à une méthode de signature f(int,int) alors que cette méthode n'existe pas, là on a une méthode" f(short,short)" (pense à la surcharge des méthodes)


Dernière édition par Gustavo le Mer 04 Juin 2008, 20:56, édité 1 fois

Gustavo

Nombre de messages : 260
Age : 29
Prénom : Renaud
Statut : étudiant 4SEC
Date d'inscription : 10/01/2008

Revenir en haut Aller en bas

Re: [LGJ]Ce Code contient uen erreur... OU??

Message  Benjy le Mer 04 Juin 2008, 20:56

non mais on avait compris ça lol
on voulais jsut une confirmation : par défaut quand on donne un littéral en paramètre, il est stocké en tant que INT? (sauf si virgule, ou taille supérieur)

Benjy

Nombre de messages : 382
Prénom : Benjamin
Statut : étudiant
Localisation : Ath - Hainaut
Date d'inscription : 06/10/2007

Revenir en haut Aller en bas

Re: [LGJ]Ce Code contient uen erreur... OU??

Message  Gustavo le Mer 04 Juin 2008, 20:57

[quote=\"Benjy\"]non mais on avait compris ça lol
on voulais jsut une confirmation : par défaut quand on donne un littéral en paramètre, il est stocké en tant que INT? (sauf si virgule, ou taille supérieur)[/quote]

ah d\'accord pardon

la réponse est oui

edit: encore que, en fait il y a promotion numérique et donc le type des opérandes sera adpaté à ceux attendu

donc: doube d = 2 => 2 sera vu comme un double


Dernière édition par Gustavo le Mer 04 Juin 2008, 21:00, édité 1 fois

Gustavo

Nombre de messages : 260
Age : 29
Prénom : Renaud
Statut : étudiant 4SEC
Date d'inscription : 10/01/2008

Revenir en haut Aller en bas

Re: [LGJ]Ce Code contient uen erreur... OU??

Message  Zahra le Mer 04 Juin 2008, 20:58

Merci Gustavo Smile

Zahra

Nombre de messages : 250
Age : 29
Prénom : Zahra
Statut : Etudiante 2e Gestion
Localisation : Wauthier-Braine
Date d'inscription : 18/05/2007

Revenir en haut Aller en bas

Re: [LGJ]Ce Code contient uen erreur... OU??

Message  Benjy le Mer 04 Juin 2008, 20:59

merci!!!!

Benjy

Nombre de messages : 382
Prénom : Benjamin
Statut : étudiant
Localisation : Ath - Hainaut
Date d'inscription : 06/10/2007

Revenir en haut Aller en bas

Re: [LGJ]Ce Code contient uen erreur... OU??

Message  Gustavo le Mer 04 Juin 2008, 21:00

de rien mais j'ai édité ^^

Gustavo

Nombre de messages : 260
Age : 29
Prénom : Renaud
Statut : étudiant 4SEC
Date d'inscription : 10/01/2008

Revenir en haut Aller en bas

Re: [LGJ]Ce Code contient uen erreur... OU??

Message  Invité le Mer 04 Juin 2008, 21:02

alors

règles java pour les conversions de type:
Code:
int i=1;
short s=i; //interdit car on risque de perdre de la précision.
long l=i; //permis
donc, quand tu fais
Code:
f(1, 2);
le prototype recherché est
Code:
f(int, int);
on n'a que
Code:
f(short, short);
à disposition...
=> erreur.
ça aurait fonctionné si tu avais du
Code:
f(int, long);
ou du
Code:
f(long, int);
ou encore du
Code:
f(long, long);
mais encore mieux la représentation exacte:
Code:
f(int, int);
donc, pour passer le short 1 et le short 2 à
Code:
f(short, short);
il faut caster l'int 1 en short et l'int 2 en short.
comme ceci:
Code:
f((short)1, (short)2);
et ça compilera Smile

voilà, j'espère que tout est clair maintenant...

Invité
Invité


Revenir en haut Aller en bas

Re: [LGJ]Ce Code contient uen erreur... OU??

Message  Benjy le Mer 04 Juin 2008, 21:03

hum Gustavo, tu veux dire qu'il est sensé les considérer comme des short vu le type des paramètre demandé??

Herbiti, 1 et 2 c'est pas acceptable en tant que short??? c'est quoi un short alors??? Shocked Shocked

HA NON! ok ok! ouai donc enfait il considère bien que c'est du int lorsqu'on appel la méthode, par défaut donc comme nous l'avais confirmer gustavo au dessus, et puis ca plante car il essai de caster en short et que ce n'est pas accepté

c'est ça?

Benjy

Nombre de messages : 382
Prénom : Benjamin
Statut : étudiant
Localisation : Ath - Hainaut
Date d'inscription : 06/10/2007

Revenir en haut Aller en bas

Re: [LGJ]Ce Code contient uen erreur... OU??

Message  Invité le Mer 04 Juin 2008, 21:08

Code:
(short)1;
est un short

exemple:

Code:
public class Main
{
    public static void main(String[] args)
    {
        f(1, 2); // affichera "j'ai reçu un long et un int"
        f((short)1, 2); //affichera "j'ai reçu un long et un int"
        f((short)1, (short)2); //affichera "j'ai reçu deux shorts"
        f(1, (long)2); //affichera "j'ai reçu deux longs"
    }

    public static void f(short a, short b)
    {
      System.out.println("j'ai reçu deux shorts");
    }

    public static void f(long a, long b)
    {
      System.out.println("j'ai reçu deux longs");
    }

    public static void f(long a, int b)
    {
      System.out.println("j'ai reçu un long et un int");
    }
}

c'est la base même de la surcharge


Dernière édition par Herbiti le Mer 04 Juin 2008, 21:16, édité 2 fois

Invité
Invité


Revenir en haut Aller en bas

Re: [LGJ]Ce Code contient uen erreur... OU??

Message  Benjy le Mer 04 Juin 2008, 21:16

pfouuaaa

bon

si on dit f(1,2)
le compilateur il considère 1 et 2 de quel type?????

Benjy

Nombre de messages : 382
Prénom : Benjamin
Statut : étudiant
Localisation : Ath - Hainaut
Date d'inscription : 06/10/2007

Revenir en haut Aller en bas

Re: [LGJ]Ce Code contient uen erreur... OU??

Message  Invité le Mer 04 Juin 2008, 21:20

Benjy a écrit:pfouuaaa

bon

si on dit f(1,2)
le compilateur il considère 1 et 2 de quel type?????

à la base, il le considère comme 2 int...
il cherche d'abord
Code:
f(int, int);
puis, s'il ne trouve pas, il passe à
Code:
f(int, long);
ou
Code:
f(long, int);
attention, si les deux existent, il va avoir une erreur!
si ne trouve aucun de ces deux-là, il passe à
Code:
f(long, long);
sinon, il fait erreur...

et je trouve que l'exemple que j'ai pris est assez rigolo... ^^

Invité
Invité


Revenir en haut Aller en bas

Re: [LGJ]Ce Code contient uen erreur... OU??

Message  Benjy le Mer 04 Juin 2008, 21:26

ok donc le soucis c'est, il considère pas ça comme short par défaut... c'est con, et je vois pas pourquoi mais ok j'ai compris ^^
merci!

Benjy

Nombre de messages : 382
Prénom : Benjamin
Statut : étudiant
Localisation : Ath - Hainaut
Date d'inscription : 06/10/2007

Revenir en haut Aller en bas

Re: [LGJ]Ce Code contient uen erreur... OU??

Message  nvs le Mer 04 Juin 2008, 21:26

en fait, il semble qu'il n'existe pas de littéral de type byte ou short en java. il faut donc transtyper, comme le fait Herbiti. notez que les types entiers int et long ont bien des littéraux associés.













_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [LGJ]Ce Code contient uen erreur... OU??

Message  Gustavo le Mer 04 Juin 2008, 21:29

et de tout façon la promotion numérique se fait vers le haut et pas vers le bas...

Gustavo

Nombre de messages : 260
Age : 29
Prénom : Renaud
Statut : étudiant 4SEC
Date d'inscription : 10/01/2008

Revenir en haut Aller en bas

Re: [LGJ]Ce Code contient uen erreur... OU??

Message  Zahra le Mer 04 Juin 2008, 21:29

Merci pour les réponses, c'est clair Very Happy

Zahra

Nombre de messages : 250
Age : 29
Prénom : Zahra
Statut : Etudiante 2e Gestion
Localisation : Wauthier-Braine
Date d'inscription : 18/05/2007

Revenir en haut Aller en bas

Re: [LGJ]Ce Code contient uen erreur... OU??

Message  Benjy le Mer 04 Juin 2008, 21:29

comment ça des littéraux associés?

Benjy

Nombre de messages : 382
Prénom : Benjamin
Statut : étudiant
Localisation : Ath - Hainaut
Date d'inscription : 06/10/2007

Revenir en haut Aller en bas

Re: [LGJ]Ce Code contient uen erreur... OU??

Message  Gustavo le Mer 04 Juin 2008, 21:32

Benjy a écrit:comment ça des littéraux associés?

C'est le fait que par exemple si tu écris 2, java l'associe à un entier (int ou long, alors que si tu écris 2.3 il l'associé à un réel (double ou float)

Gustavo

Nombre de messages : 260
Age : 29
Prénom : Renaud
Statut : étudiant 4SEC
Date d'inscription : 10/01/2008

Revenir en haut Aller en bas

Re: [LGJ]Ce Code contient uen erreur... OU??

Message  Benjy le Mer 04 Juin 2008, 21:32

a oui ok, des Type de littéraux associé alors, ca serait plus juste de dire ça Smile

Benjy

Nombre de messages : 382
Prénom : Benjamin
Statut : étudiant
Localisation : Ath - Hainaut
Date d'inscription : 06/10/2007

Revenir en haut Aller en bas

Re: [LGJ]Ce Code contient uen erreur... OU??

Message  Invité le Mer 04 Juin 2008, 21:32

literral : nombre en tant que tel sans caster

il n'existe donc pas de littéral byte et short...

le litéral de type int s'écrit bêtement 123
le même litéral de type long s'écrit 123L

pour vous faire mousser...
Code:
int i=123L;

ne compilera pas...

Invité
Invité


Revenir en haut Aller en bas

Re: [LGJ]Ce Code contient uen erreur... OU??

Message  Gustavo le Mer 04 Juin 2008, 21:34

Herbiti a écrit:literral : nombre en tant que tel sans caster

il n'existe donc pas de littéral byte et short...

le litéral de type int s'écrit bêtement 123
le même litéral de type long s'écrit 123L

pour vous faire mousser...
Code:
int i=123L;

ne compilera pas...

le 123L dans un int c'est normal, vu que la représentation d'un long est plus grande
sinon pour un int ou pourrait très bien écrire 123I

Gustavo

Nombre de messages : 260
Age : 29
Prénom : Renaud
Statut : étudiant 4SEC
Date d'inscription : 10/01/2008

Revenir en haut Aller en bas

Re: [LGJ]Ce Code contient uen erreur... OU??

Message  nvs le Mer 04 Juin 2008, 21:36

il existe des littéraux de type int. par exemple : 1, -1, 0x0f28 (hexadécimal), '\u003f' (hexadécimal unicode), 027 (octal), Integer.MAX_VALUE, Integer.MIN_VALUE.

il existe des littéraux de type long. par exemple : 3L, -99l, 0xf011223344L, Long.MAX_VALUE, Long.MIN_VALUE.

plus de détails ici (chercher literals au tiers de la page).









_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [LGJ]Ce Code contient uen erreur... OU??

Message  Contenu sponsorisé Aujourd'hui à 01:10


Contenu sponsorisé


Revenir en haut Aller en bas

Page 1 sur 3 1, 2, 3  Suivant

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum